我有一段关于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 :(得分:6)
Mac上的Java对事件调度线程中发生的事情非常挑剔。试试这个。
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。但基本上,你传递一个Runnable来做Swing的东西,它会在正确的线程中执行它。如果你不想等,还有InvokeLater。
答案 1 :(得分: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");
}