3

我使用以下代码从 actionPerformed 上的按钮直接调用 invokeLater:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            int temp = (jComboBox1.getSelectedIndex() + 1);
        heavyProccesingFunction();
        }
   });
} 

这仍然会冻结 GUI。为什么?不使用invokelater函数我得到相同的结果。

我应该使用

Thread queryThread = new Thread() {
      public void run() { 

反而?

编辑:

谢谢,应该使用新线程。

4

1 回答 1

5

invokeLater仍然最终在调度程序线程上运行代码 - 稍后。的目的invokeLater是允许后台线程在事件调度程序线程上发布工作。

听起来您确实应该创建另一个线程-或使用线程池来获得相同的效果,或者SwingWorker例如。无论您做什么,都需要避免在事件调度程序线程上运行慢速方法。

于 2011-09-12T17:58:39.923 回答