在我的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();
答案 0 :(得分:2)
如果您在未选择文件的情况下退出JFileChooser
,chooser.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()可以返回的其他几个值,但这通常就足够了。