JFileChooser 设置目录
JFileChooser set directory
我正在尝试设置我的 JFileChooser
应该显示的目录。我正在尝试使用方法 setCurrentDirectory
:
public class FileChooser {
public static void main(String[] args) {
JFrame jf = new JFrame();
JFileChooser chooser = new JFileChooser();
jf.add(chooser);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.pack();
File file = new File("C:\");
if(file.exists() && chooser != null) {
chooser.setCurrentDirectory(file);
}
}
}
这是奇怪的部分:
当我 运行 我的程序一切正常。但是当我再次尝试 运行 时,它有时会抛出 NullPointerException
。这可以发生在第一次重新运行之后,也可以连续工作10次。没有模式。
我不会修改我的 C:
目录。
这是完整代码,没有被截断。
完整的堆栈跟踪:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1368)
at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1311)
at javax.swing.plaf.basic.BasicListUI.getCellBounds(BasicListUI.java:952)
at javax.swing.JList.getCellBounds(JList.java:1637)
at javax.swing.JList.ensureIndexIsVisible(JList.java:1149)
at sun.swing.FilePane.ensureIndexIsVisible(FilePane.java:1708)
at sun.swing.FilePane.doDirectoryChanged(FilePane.java:1631)
at sun.swing.FilePane.propertyChange(FilePane.java:1681)
at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
at java.awt.Component.firePropertyChange(Component.java:8434)
at javax.swing.JFileChooser.setCurrentDirectory(JFileChooser.java:598)
at filechooser.FileChooser.main(FileChooser.java:21)
当我尝试通过构造函数 JFileChooser(String currentDirectoryPath)
设置目录时,一切正常。即使我连续尝试了 100 次(相信我,我已经尝试了 100 次)。代码:
public class FileChooser {
public static void main(String[] args) {
JFrame jf = new JFrame();
JFileChooser chooser = new JFileChooser("C:\");
jf.add(chooser);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.pack();
}
}
所以chooser.setCurrentDirectory(new File("C:\"));
肯定有问题
我无法使用构造函数。我必须设置 currentDirectory。
当 Exception
被抛出时,getCurrentDirectory()
returns C:\
,即使我的 FileChooser
没有显示这个目录。
有人知道这里发生了什么吗?
多亏了 Andrew Thompson,我才开始工作。我不得不更换
chooser.setCurrentDirectory(file);
和
SwingUtilities.invokeLater(() -> chooser.setCurrentDirectory(new File("C:\")));
我正在尝试设置我的 JFileChooser
应该显示的目录。我正在尝试使用方法 setCurrentDirectory
:
public class FileChooser {
public static void main(String[] args) {
JFrame jf = new JFrame();
JFileChooser chooser = new JFileChooser();
jf.add(chooser);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.pack();
File file = new File("C:\");
if(file.exists() && chooser != null) {
chooser.setCurrentDirectory(file);
}
}
}
这是奇怪的部分:
当我 运行 我的程序一切正常。但是当我再次尝试 运行 时,它有时会抛出 NullPointerException
。这可以发生在第一次重新运行之后,也可以连续工作10次。没有模式。
我不会修改我的 C:
目录。
这是完整代码,没有被截断。
完整的堆栈跟踪:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1368)
at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1311)
at javax.swing.plaf.basic.BasicListUI.getCellBounds(BasicListUI.java:952)
at javax.swing.JList.getCellBounds(JList.java:1637)
at javax.swing.JList.ensureIndexIsVisible(JList.java:1149)
at sun.swing.FilePane.ensureIndexIsVisible(FilePane.java:1708)
at sun.swing.FilePane.doDirectoryChanged(FilePane.java:1631)
at sun.swing.FilePane.propertyChange(FilePane.java:1681)
at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
at java.awt.Component.firePropertyChange(Component.java:8434)
at javax.swing.JFileChooser.setCurrentDirectory(JFileChooser.java:598)
at filechooser.FileChooser.main(FileChooser.java:21)
当我尝试通过构造函数 JFileChooser(String currentDirectoryPath)
设置目录时,一切正常。即使我连续尝试了 100 次(相信我,我已经尝试了 100 次)。代码:
public class FileChooser {
public static void main(String[] args) {
JFrame jf = new JFrame();
JFileChooser chooser = new JFileChooser("C:\");
jf.add(chooser);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.pack();
}
}
所以chooser.setCurrentDirectory(new File("C:\"));
肯定有问题
我无法使用构造函数。我必须设置 currentDirectory。
当 Exception
被抛出时,getCurrentDirectory()
returns C:\
,即使我的 FileChooser
没有显示这个目录。
有人知道这里发生了什么吗?
多亏了 Andrew Thompson,我才开始工作。我不得不更换
chooser.setCurrentDirectory(file);
和
SwingUtilities.invokeLater(() -> chooser.setCurrentDirectory(new File("C:\")));