读书人

帮小弟我看看这段代码哪里出有关问题了

发布时间: 2012-04-19 14:36:43 作者: rapoo

帮我看看这段代码哪里出问题了(简单问题,求解决啊)
package notepad;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class NotePad extends JFrame implements ActionListener{

JTextArea jta = null;
JMenuBar jmb = null;
JMenu jm = null;
JMenuItem jm1 = null;
JMenuItem jm2 = null;

public static void main(String[] args) {
NotePad np = new NotePad();
}

public NotePad() {
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jta = new JTextArea();
jmb = new JMenuBar();
jm = new JMenu("文件");
//设置助记符(单引号)
jm.setMnemonic('F');
jm1 = new JMenuItem("打开");
//注册监听器
jm1.addActionListener(this);
jm1.setActionCommand("open");
jm2 = new JMenuItem("保存");
//注册监听器
jm2.addActionListener(this);
jm2.setActionCommand("save");
//将组建添加到JFrame中
jm.add(jm1);
jm.add(jm2);
jmb.add(jm);
setJMenuBar(jmb);
add(jta);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("save"))
{
//文件选择组建
JFileChooser jfc=new JFileChooser();
jfc.setDialogTitle("保存为:");
//按默认的方式显示
jfc.showSaveDialog(null);
jfc.setVisible(true);
String file=jfc.getSelectedFile().getAbsolutePath();
FileWriter fw=null;
BufferedWriter bw=null;
try {
fw =new FileWriter(file);
bw=new BufferedWriter(fw);
bw.write(this.jta.getText());
} catch (IOException ex) {
Logger.getLogger(NotePad.class.getName()).log(Level.SEVERE, null, ex);
}
finally{
try {
fw.close();
bw.close();
} catch (IOException ex) {
Logger.getLogger(NotePad.class.getName()).log(Level.SEVERE, null, ex);
}

}

}else
if(e.getActionCommand().equals("open"));
{

//文件选择组建
JFileChooser jfc=new JFileChooser();
jfc.setDialogTitle("请选择组建:");
//按默认的方式显示
jfc.showOpenDialog(null);
jfc.setVisible(true);
String filename=jfc.getSelectedFile().getAbsolutePath();
FileReader fr=null;
BufferedReader br=null;
try {
fr=new FileReader(filename);
br=new BufferedReader(fr);
String s="";
String con="";
try {
while((s=br.readLine())!=null)
{
con+=s+"\r\n";


}
} catch (IOException ex) {
Logger.getLogger(NotePad.class.getName()).log(Level.SEVERE, null, ex);
}
jta.setText(con);
} catch (FileNotFoundException ex) {
Logger.getLogger(NotePad.class.getName()).log(Level.SEVERE, null, ex);
}finally{
try {
fr.close();
br.close();
}catch (IOException ex) {
Logger.getLogger(NotePad.class.getName()).log(Level.SEVERE, null, ex);
}
}
}




}
}





[解决办法]
1.String file=jfc.getSelectedFile().getAbsolutePath();要对file进行判断,不选择存文件的时候会返回null值导致你的程序异常;
2.fr.close();
br.close();
去掉fr.close()。已经用BufferedWriter将FileWriter包装了,只要关br,就会自动去关fr的。你这样写,fr先关闭了,会导致IO异常,因为fr流已经被关闭了。
3.程序逻辑还有问题,会导致保存的对话框重复弹出一次,自己检查。

读书人网 >J2SE开发

热点推荐