我正在创建一个小型 Swing 应用程序,它绘制文件中给出的一组点。指南建议我为 GUI 调用一个新线程,为此我使用了以下代码。
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new View().setVisible(true);
}
});
应用程序中的场景之一是打开文件(这是使用 JFileChooser
完成的)。
private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
//some heavy operations
} else {
System.out.println("File access cancelled by user.");
}
}
在继续绘制点之前,需要完成一些繁重的操作。
我的问题是,是否建议将大量代码放在 GUI
线程中?是否可以将文件对象发送到主线程进行处理并将结果发送到GUI
线程?
请注意,我对 Java Threading API 一无所知。
最佳答案
使用SwingWorker
SwingWorker
提出了一种解决该问题的方法,即在另一个后台线程上执行耗时的任务,并在此期间保持 GUI 的响应能力。
看看这个
http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html
http://www.theeggeadventure.com/wikimedia/index.php/SwingWorker_Example
http://www.javaworld.com/javaworld/jw-06-2003/jw-0606-swingworker.html
关于java - Swing线程通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15026281/