2010-06-15 39 views
0

当我告诉这个片段中一个JFileChooser:NullPointerException异常显示的JFileChooser

public File getDestination() { 
    JFileChooser chooser = new JFileChooser(); 
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
    int option = chooser.showSaveDialog(null); 
    if(option == JFileChooser.APPROVE_OPTION) { 
     return chooser.getSelectedFile().getAbsolutePath(); 
    } 
    return new File("."); 
} 

通常,第一次它的表现,它正确显示&作品。第二次,它总是会抛出此异常:

Exception in thread "Basic L&F File Loading Thread" java.lang.NullPointerException 
    at sun.awt.shell.Win32ShellFolder2.pidlsEqual(Unknown Source) 
    at sun.awt.shell.Win32ShellFolder2.equals(Unknown Source) 
    at sun.awt.shell.Win32ShellFolderManager2.isFileSystemRoot(Unknown Source) 
    at sun.awt.shell.ShellFolder.isFileSystemRoot(Unknown Source) 
    at javax.swing.filechooser.FileSystemView.isFileSystemRoot(Unknown Source) 
    at javax.swing.filechooser.WindowsFileSystemView.isTraversable(Unknown Source) 
    at javax.swing.JFileChooser.isTraversable(Unknown Source) 
    at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run0(Unknown Source) 
    at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(Unknown Source) 

Java的版本说:

java version "1.6.0_20" 
Java(TM) SE Runtime Environment (build 1.6.0_20-b02) 
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing) 

而且我发现here线程说我应该降级的Java版本。我应该遵循他们的建议,还是有什么我可以做错的?

+0

不管你的问题: 当“showSaveDialog”返回的内容不是JFileChooser.APPROVE_OPTION时,为什么要返回“新的File(”。“)”? (例如CANCEL_OPTION或ERROR_OPTION) – Tedil 2010-06-15 17:07:32

+0

,因为我保存在应用程序的工作目录中。 – Geo 2010-06-15 17:10:25

+0

注意6u19和6u20是安全版本,所以要非常小心地降级。 – 2010-06-15 17:22:52

回答

1

这真的看起来像是一个版本问题/回归。 所以答案会因此是:听从他们的建议,你没有做错任何事;)