0

在我的 java 应用程序中,有一个浏览按钮。单击浏览按钮时,弹出文件选择器以选择文件。当我通过单击右上角的十字标记而不选择文件来关闭文件选择器时,它会给出一个异常提示“线程中的异常“AWT-EventQueue-0”java.lang.NullPointerException”。我该如何防止这个错误?

        JFileChooser chooser = new JFileChooser();

        chooser.setCurrentDirectory(new java.io.File("."));
        //chooser.setDialogTitle(choosertitle);
        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        //chooser.setAcceptAllFileFilterUsed(false);
        chooser.showOpenDialog(frame);

        path=chooser.getSelectedFile().getPath();
4

2 回答 2

2

如果您在JFileChooser不选择文件的情况下退出,chooser.getSelectedFile()将返回null.

因此,当您尝试调用所选文件时,您会在您的线路path=chooser.getSelectedFile().getPath();上得到一个,因为您退出了。NullPointerExceptiongetPath()null

您将需要进行一些错误处理,例如:

JFileChooser chooser = new JFileChooser();

chooser.setCurrentDirectory(new java.io.File("."));
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.showOpenDialog(frame);

File selectedFile = chooser.getSelectedFile();
if (selectedFile == null) {
    System.out.println("No file selected!");
    path = "";
}
else {
    path = selectedFile.getPath();
}

在这种情况下,我建议通读您从中检索资源的方法的 Javadoc。经常在“returns”部分下,它会说明返回的对象是否可以null,或者即使它被保证不可以null

在决定何时以及何时不添加null检查等内容时,这对我有很大帮助。

于 2013-11-13T03:17:35.010 回答
1

使用 JFileChooser 的最佳方式可能是使用 chooser.showOpenDialog(this),它返回一个值,指示用户单击了什么。

代替

chooser.showOpenDialog(frame);

你可以写

int returnVal = chooser.showOpenDialog(frame);
if (returnVal == JFileChooser.APPROVE_OPTION) { 
   path=chooser.getSelectedFile().getPath();
   // whatever other code that only has sense if the user clicked "Ok".
}

现在你明白了,通常更快的方法:

if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { //whatever }

您可以查看chooser.showOpenDialog() 可以返回的其他几个值,但这通常就足够了。

于 2014-03-03T18:59:01.320 回答