当前位置:编程学习 > JAVA >>

点击“文件”——“打开”或“保存”,出现一个“请选择文件“或”另存为”的框,不选择文件,然后直接关闭,会抛出空指针异常,这个怎么处理??


import java.io.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class NoteBook extends JFrame implements ActionListener {
JTextArea jta = null;
JMenuBar jmb = null;
JMenu jm = null;
JMenuItem jmi1 = null;
JMenuItem jmi2 = null;
JMenuItem jmi3 = null;
JScrollPane jsp = null;

public static void main(String args[]) {
new NoteBook();
}

public NoteBook() {
jta = new JTextArea();
jsp = new JScrollPane(jta);

//分别设置水平和垂直滚动条自动出现
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

jmb = new JMenuBar();
jm = new JMenu("文件");
jmi1 = new JMenuItem("打开");
jmi1.setActionCommand("OPEN");
jmi1.addActionListener(this);
jmi2 = new JMenuItem("保存");
jmi2.setActionCommand("SAVE");
jmi2.addActionListener(this);
jmi3 = new JMenuItem("退出");
jmi3.setActionCommand("EXIT");
jmi3.addActionListener(this);
this.add(jsp);
this.add(jmb,BorderLayout.NORTH);
jmb.add(jm);
jm.add(jmi1);
jm.add(jmi2);
jm.add(jmi3);
this.setSize(600,600);
this.setTitle("记事本");
this.setLocation(200, 100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("OPEN")) {
JFileChooser jfc1 = new JFileChooser();
jfc1.setDialogTitle("请选择文件...");
jfc1.showOpenDialog(null);
jfc1.setVisible(true);

String fileName = null;
try {
fileName = jfc1.getSelectedFile().getAbsolutePath();//异常
}catch(java.lang.NullPointerException e1) {
System.out.println("取消打开文件!");
// e1.printStackTrace();
}

String str = null;
String allStr = null;
BufferedReader br = null;
try {
    br = new BufferedReader(new FileReader(fileName));
while((str = br.readLine())!= null) {
allStr += str + "\r\n";
}
jta.setText(allStr);
} catch (Exception e1) {
e1.printStackTrace();
}finally {
try {
br.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

if(e.getActionCommand().equals("SAVE")) {
JFileChooser jfc2 = new JFileChooser();
jfc2.setDialogTitle("另存为...");
jfc2.showSaveDialog(null);
jfc2.setVisible(true);

String fileName = null;
try {
fileName = jfc2.getSelectedFile().getAbsolutePath(); //异常
}catch(java.lang.NullPointerException e1) {
System.out.println("取消打开文件!");
// e1.printStackTrace();
}

BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(fileName));
bw.write(jta.getText());
} catch (Exception e1) {
e1.printStackTrace();
}finally {
try {
bw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

if(e.getActionCommand().equals("EXIT")) {
System.exit(0);
}
}
}
--------------------编程问答-------------------- 那就判断一下getSelectedFile()返回结果是否为null 

if (e.getActionCommand().equals("OPEN")) {
JFileChooser jfc1 = new JFileChooser();
jfc1.setDialogTitle("请选择文件...");
jfc1.showOpenDialog(null);
jfc1.setVisible(true);

String fileName = null;
try {
File selectedFile = jfc1.getSelectedFile();
if (selectedFile != null) { // 判断是否选中文件
fileName = selectedFile.getAbsolutePath();
}
} catch (java.lang.NullPointerException e1) {
System.out.println("取消打开文件!");
e1.printStackTrace();
}

if (fileName != null) { // 选中文件才进行写入操作
String str = null;
String allStr = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(fileName));
while ((str = br.readLine()) != null) {
allStr += str + "\r\n";
}
jta.setText(allStr);
} catch (Exception e1) {
e1.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

}
--------------------编程问答-------------------- 在这段代码中关闭异常的输出即可。
//e1.printStackTrace();
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,