我正在创建一个小型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。
答案 0 :(得分:4)
使用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
答案 1 :(得分:1)
如果长时间运行任务的结果修改了Swing组件,则可以使用SwingWorker
。有关详细信息,请参阅Worker Threads and SwingWorker。