每次打开文件浏览器然后关闭它而不选择文件时我得到NullPointerException
。
@Override
public void actionPerformed(ActionEvent e) {
if(!(dndfolder.exists())) {
new File(homefolder + "DND").mkdir();
}
browse = new JFileChooser(homefolder+"DND");
returnVal = browse.showOpenDialog(loadchar);
browse.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if(browse.getSelectedFile().exists()) {
sheet = browse.getSelectedFile();
}
if(sheet.exists() && sheet.getName().endsWith(".txt")) {
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().edit(sheet);
} catch (IOException ex) {
Logger.getLogger(panel.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
error = "*I don't really know what to put here";
repaint();
}
} else {
error = "*File type not supported";
repaint();
}
}
我可以打开文本文件但是当所选项目不存在时它会失败。我试着围绕它编码,但我无法让它工作。有什么想法吗?
答案 0 :(得分:1)
if(browse.getSelectedFile().exists())
如果您没有选择文件,那么browse.getSelectedFile()
可能会返回null
,但您可以继续拨打exists()
。
您应该执行以下操作:
if (browse.getSelectedFile != null && browse.getSelectedFile().exists())
答案 1 :(得分:1)
您没有正确使用JFileChooser
。返回值告诉您用户是否取消,您需要检查...
if(returnVal == JFileChooser.APPROVE_OPTION) {
File selectedFile = browse.getSelectedFile();
// Do file stuff here, and nowhere else.
}
此外,returnVal = browse.showOpenDialog(loadchar);
会阻止用户执行某些操作,因此当您拨打browse.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
时,之后,它什么都不做。这是因为它只会在 窗口关闭后更改选择模式 。
也许您会从教程中受益:http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html