当前位置: 代码迷 >> J2SE >> []为什么小弟我的JFileChooser的窗口一按打开就报错
  详细解决方案

[]为什么小弟我的JFileChooser的窗口一按打开就报错

热度:86   发布时间:2016-04-23 19:40:48.0
[求助]为什么我的JFileChooser的窗口一按打开就报错
如下代码,我选中文件后一按打开就报错,初学者,求教各位大神什么原因!
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.event.*;
import java.io.*;
public class A16_11 extends JFrame implements ActionListener{
JPanel mb;
JTextArea ta;
JButton an1,an2;
JScrollPane sp;
JFileChooser fc1,fc2;

public static void main(String[] args){
A16_11 test=new A16_11();
}

public A16_11() {
try {//设置JFileChooser的外观为当前windows风格
if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") != -1){
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
} catch (Exception e1) {
e1.printStackTrace();
}
mb=new JPanel();
ta=new JTextArea();
sp=new JScrollPane(ta);
an1=new JButton("打开");
an1.setActionCommand(an1.getName());
an1.addActionListener(this);
an2=new JButton("另存为");
an2.setActionCommand(an2.getName());
an2.addActionListener(this);

this.add(sp,BorderLayout.CENTER);
this.add(mb,BorderLayout.SOUTH);
mb.add(an1); mb.add(an2);

this.setTitle("打开与保存");
this.setSize(600, 400);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(true);
this.setVisible(true);
}

public void loadFile(String name)throws Exception{
BufferedReader br=new BufferedReader(new FileReader(name));
String aline;
while((aline=br.readLine())!=null){
ta.append(aline+"/n");
}
br.close();
}
public void actionPerformed(ActionEvent e){
if(an1.getActionCommand().equals("打开")){
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"文本文档(*.txt)",new String[]{"TXT"});
fc1=new JFileChooser();
fc1.setDialogTitle("打开文件");
fc1.setMultiSelectionEnabled(false);
fc1.setFileHidingEnabled(false);
fc1.setAcceptAllFileFilterUsed(false);
fc1.setFileFilter(filter); 
fc1.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc1.showOpenDialog(this);
if(fc1.APPROVE_OPTION==fc1.showOpenDialog(this)){
String fileDir=fc1.getSelectedFile().getPath();
String fileName=fc1.getName();
String file=fileDir+fileName;
try {
this.loadFile(file);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
}

------解决思路----------------------
引用:
具体错误在程序中给你注释出来并修改好了。


package test;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.filechooser.FileNameExtensionFilter;
public class A16_11 extends JFrame implements ActionListener{
private static final long serialVersionUID = -1783846148921949475L;
JPanel mb;
    JTextArea ta;
    JButton an1,an2;
    JScrollPane sp;
    JFileChooser fc1,fc2;
 
    public static void main(String[] args){
        A16_11 test=new A16_11();
    }
 
    public A16_11() {
        try {//设置JFileChooser的外观为当前windows风格
            if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") != -1){
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        mb=new JPanel();
        ta=new JTextArea();
        sp=new JScrollPane(ta);
        an1=new JButton("打开");
        an1.setActionCommand(an1.getName());
        an1.addActionListener(this);
        an2=new JButton("另存为");
        an2.setActionCommand(an2.getName());
        an2.addActionListener(this);
 
        this.add(sp,BorderLayout.CENTER);
        this.add(mb,BorderLayout.SOUTH);
        mb.add(an1); mb.add(an2);
 
        this.setTitle("打开与保存");
        this.setSize(600, 400);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(true);
        this.setVisible(true);
    }
 
    public void loadFile(String name)throws Exception{
        BufferedReader br=new BufferedReader(new FileReader(name));
        String aline;
        while((aline=br.readLine())!=null){
            ta.append(aline+"/n");
        }
        br.close();
    }
    public void actionPerformed(ActionEvent e){
        if(an1.getActionCommand().equals("打开")){
            FileNameExtensionFilter filter = new FileNameExtensionFilter(
                    "文本文档(*.txt)",new String[]{"TXT"});// 之前你的"(*.txt)"用的是中文括号,应该用英文括号。。
            fc1=new JFileChooser();
            fc1.setDialogTitle("打开文件");
            fc1.setMultiSelectionEnabled(false);
            fc1.setFileHidingEnabled(false);
            fc1.setAcceptAllFileFilterUsed(false);
            fc1.setFileFilter(filter); 
            fc1.setFileSelectionMode(JFileChooser.FILES_ONLY);
            int ret = fc1.showOpenDialog(this);
            if(JFileChooser.APPROVE_OPTION == ret){
             // 此路径就是文件的全路径了。。
                String fileDir=fc1.getSelectedFile().getPath();
                // 不信给你打印出来了。。
                System.out.println(fileDir);
                
                //String fileName=fc1.getName();// 这个是返回打开文件对话框的名字。。。
                
                // String file=fileDir + fileName;
                try {
                 // fileDir就是文件路径。。
                    this.loadFile(fileDir);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }
    }
}

忘了说这个小问题了。。

fc1.setFileSelectionMode(JFileChooser.FILES_ONLY);
// 之前你调用了两次fc1.showOpenDialog(this),打开文件对话框会弹出两次。。
// 调用一次fc1.showOpenDialog(this)后,会返回这个对话框关闭时的结果ret,
// 直接比较结果就行了。。
 int ret = fc1.showOpenDialog(this);