2

我正在创建一个小型摇摆应用程序,它绘制文件中给定的一组点。指南建议我为 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 线程 API。

4

2 回答 2

4

useSwingWorker
SwingWorker提出了一种解决方法,方法是在另一个后台线程上执行耗时的任务,在此期间保持 GUI 响应。

看看这个

http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

http://www.theeggeadventure.com/wikimedia/index.php/SwingWorker_Example

http://weblogs.java.net/blog/mkarg/archive/2010/01/03/did-you-know-swingworker-can-send-progress-status

http://www.javaworld.com/javaworld/jw-06-2003/jw-0606-swingworker.html

于 2013-02-22T14:26:37.527 回答
1

如果长时间运行任务的结果修改了一个 Swing 组件,您可以使用SwingWorker. 有关更多信息,请参阅工作线程和 SwingWorker

于 2013-02-22T14:23:53.297 回答