2015-11-08 97 views
4

我有關於JFileChooser所半晌現在的問題,一直沒能找到幫助...問題是,該文件窗口沒有顯示出來。我試圖找到這個問題的原因,我已經測試了以下內容:JFileChooser中沒有顯示

public class Test { 
    public static void main (String[] args) { 
    load();  
    } 
    public static void load() { 
     String folder = System.getProperty("user.dir"); 
     JFileChooser fc = new JFileChooser(folder); 
     int resultat = fc.showOpenDialog(null); 
    } 
} 

運行此代碼時,我確實顯示了窗口。

但是,當我試試這個:

public class Test { 
    public static void main (String[] args) { 
    String input = JOptionPane.showInputDialog(null, "Make your choice!\n" + 
                "1. load file");  
    load(); 

    } 
} 

窗口不顯示然而,編程仍在運行... 我不知道什麼可能導致這個問題

+0

如果你的意思是,'JFileChooser'不露面,直到按下確定,取消,或在輸入對話框退出 - 那麼這是預期的行爲。 'JOptionPane'創建一個模態對話框,在對話框關閉之前阻止程序中的下一行被調用。但是,如果你不是這個意思,我不能重現你的問題。該程序對我「有用」:/ –

+0

這不是我的意思,按OK,取消或退出後窗口不顯示。由於某種奇怪的原因,JFileChooser在我使用JOptionPane之前似乎沒有顯示... – samtob

+2

應該在EDT上創建和更新Swing GUI。 –

回答

5

的Java在Mac上是真正挑剔的事件調度牛逼發生搖擺的東西hread。嘗試這個。

import java.awt.EventQueue; 
import javax.swing.JFileChooser; 

public class Test { 
    private static int result; 
    public static void main(String[] args) throws Exception { 
     EventQueue.invokeAndWait(new Runnable() { 
      @Override 
      public void run() { 
       String folder = System.getProperty("user.dir"); 
       JFileChooser fc = new JFileChooser(folder); 
       result = fc.showOpenDialog(null); 
      } 
     }); 
     System.out.println(result); 
    } 
} 

InvokeAndWait的文檔是here。但基本上,您將它傳遞給一個可執行Swing的Runnable,它將在正確的線程中執行該操作。如果你不想等待,還有InvokeLater。

+0

THANK YOU SO MUCH – benjaminhallock

0

這裏一些代碼,一個JFileChooser需要一個孩子,在這種情況下,我使用一個JDialog

JFileChooser fileChooser = new JFileChooser(); 
JDialog dialog = new JDialog(); 

       fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir"))); 
       int result = fileChooser.showOpenDialog(dialog); 
       if (result == JFileChooser.APPROVE_OPTION) { 
        File selectedFile = fileChooser.getSelectedFile(); 
        System.out.println("Selected file: " + selectedFile.getAbsolutePath()); 
       }else{ 
        System.out.println("Cancelled"); 
       }