首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFileChooser失败

JFileChooser失败
EN

Stack Overflow用户
提问于 2011-07-05 14:57:56
回答 3查看 2.4K关注 0票数 3

在我的代码中,在某种程度上,我有这样的代码

代码语言:javascript
复制
void selectRoot() {
        JFileChooser ch = new JFileChooser();
        ch.showOpenDialog((JFrame)this);
    }

这会抛出这个异常:

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.io.Win32FileSystem.normalize(Win32FileSystem.java:164)
    at java.io.Win32FileSystem.getUserPath(Win32FileSystem.java:296)
    at java.io.Win32FileSystem.resolve(Win32FileSystem.java:312)
    at java.io.File.getAbsolutePath(File.java:501)
    at sun.awt.shell.Win32ShellFolder2.<init>(Win32ShellFolder2.java:291)
    at sun.awt.shell.Win32ShellFolderManager2.createShellFolderFromRelativePIDL(Win32ShellFolderManager2.java:66)
    at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Win32ShellFolderManager2.java:56)
    at sun.awt.shell.Win32ShellFolderManager2.getRecent(Win32ShellFolderManager2.java:114)
    at sun.awt.shell.Win32ShellFolderManager2.get(Win32ShellFolderManager2.java:251)
    at sun.awt.shell.ShellFolder.get(ShellFolder.java:227)
    at sun.swing.WindowsPlacesBar.<init>(WindowsPlacesBar.java:64)
    at com.sun.java.swing.plaf.windows.WindowsFileChooserUI.updateUseShellFolder(WindowsFileChooserUI.java:505)
    at com.sun.java.swing.plaf.windows.WindowsFileChooserUI.installComponents(WindowsFileChooserUI.java:196)
    at javax.swing.plaf.basic.BasicFileChooserUI.installUI(BasicFileChooserUI.java:136)
    at com.sun.java.swing.plaf.windows.WindowsFileChooserUI.installUI(WindowsFileChooserUI.java:129)
    at javax.swing.JComponent.setUI(JComponent.java:673)
    at javax.swing.JFileChooser.updateUI(JFileChooser.java:1763)
    at javax.swing.JFileChooser.setup(JFileChooser.java:360)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:333)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:286)
    at my.pack.Main.selectRoot(Main.java:184)

在java.io.Win32FileSystem.normalize()的源中,(当前)路径似乎为空:

代码语言:javascript
复制
   public String normalize(String path) {
        int n = path.length(); // Line: 164
        char slash = this.slash;
        char altSlash = this.altSlash;

如果我从程序的另一个点运行selectRoot(),它运行的很好.

更新

伙计们,这真的是一个很好的一个伟大的书编程的陷阱!

在我的原始代码中,有一个JTextField保存实际路径并以这种方式进行初始化:

代码语言:javascript
复制
root = new JTextField();
root.setToolTipText("Root folder");
root.setText(System.clearProperty("user.dir"));

System.clearProperty()清除系统属性(改为null),返回旧值(arrrghhhhhhh)。clearProperty()可能从自动完成中滑入。

谢谢你们所有人。会给你一些选票..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-05 15:04:51

也许这个能帮上忙

代码语言:javascript
复制
new JFileChooser(System.getProperty("user.home"));
票数 1
EN

Stack Overflow用户

发布于 2011-07-05 15:37:57

确保从EDT运行showOpenDialog。如果从另一个线程调用此方法,则会导致各种错误:

代码语言:javascript
复制
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        JFileChooser ch = new JFileChooser();
        ch.showOpenDialog((JFrame)this);
    }
});
票数 3
EN

Stack Overflow用户

发布于 2011-07-05 15:07:50

这项工作对我来说:

代码语言:javascript
复制
        import javax.swing.JDialog;
        import javax.swing.JFileChooser;
        import javax.swing.JFrame;


        public class MyDialog extends JDialog {

            public MyDialog(){
                super(new JFrame("prova"));
            }

            void selectRoot() {
                JFileChooser ch = new JFileChooser();
                ch.showOpenDialog(this);
            }


            public static void main(String[] args) throws Exception{
                MyDialog myDialog = new MyDialog();
                myDialog.show(true);
                myDialog.selectRoot();
            }

        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6584750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档