JFilechooser退出关闭

时间:2013-11-13 02:59:34

标签: java swing nullpointerexception jfilechooser

在我的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();

2 个答案:

答案 0 :(得分:2)

如果您在未选择文件的情况下退出JFileChooserchooser.getSelectedFile()将返回null

因此,在您path=chooser.getSelectedFile().getPath();行上,当您退出时,当您尝试在NullPointerException所选文件上致电getPath()时,您会收到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。通常在“返回”部分下,它将说明返回的对象是null,还是保证不是null

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

答案 1 :(得分:0)

使用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()可以返回的其他几个值,但这通常就足够了。