2015-11-08 56 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"); 
       }