我在Java中有一个mainClass,可以在swing中启动GUI。我要求用户使用JFileChooser打开文件。我希望main等待用户完成选择文件,然后继续使用main中的其余代码。我如何使用线程执行此操作?提前谢谢。
这是骨架代码:
public class MainClass {
public static void main(String[] args) {
GUI gui= new GUI();
//wait for user input here
//Continue with code
System.out.println("User has picked a file");
}
}
GUI.java
public class GUI{
//User picks file using JFileChooser
JFileChooser chooseFile= new JFileChooser();
//Notify mainclass we're done with fiction to continue with code
}
答案 0 :(得分:2)
问题是,您只需使用“模态”对话框即可实现等待用户选择文件的目标。这类似于以下内容:
import javax.swing.*;
public class DialogTest {
public static void main(String[] args) {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
System.out.println("File chooser is now closed. File is: " +
chooser.getSelectedFile().toString());
}
}
在用户选择文件,单击取消或单击X之前,showOpenDialog
方法不会返回。请注意,如果用户取消,getSelectedFile()
将返回null。
Swing使用它所谓的Event Dispatch Thread。如评论中所述,Swing不是线程安全的。这意味着对Swing组件的任何和所有方法调用都应该从EDT完成。您可以使用SwingUtilities.invokeLater(Runnable)
计划在EDT上运行的代码。您可以使用Swing Worker计划在后台线程(使用线程池)中运行某些内容。您的大多数代码可能只在EDT上运行。可以使用swing worker将长时间运行的操作发送到后台线程。