簡體   English   中英

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:\\\\"));有問題chooser.setCurrentDirectory(new File("C:\\\\")); 我沒有辦法使用構造函數。 我必須設置currentDirectory。

拋出Exception ,即使我的FileChooser沒有顯示此目錄, getCurrentDirectory()也會返回C:\\

有人知道這里發生了什么嗎?

多虧了Andrew Thompson ,我才開始工作。 我不得不更換

chooser.setCurrentDirectory(file);

SwingUtilities.invokeLater(() -> chooser.setCurrentDirectory(new File("C:\\")));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM