3

アクションのボタンから直接invokeLaterを呼び出すim次のコードで実行:

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。何をするにしても、イベントディスパッチャスレッドでslowメソッドを実行することは避ける必要があります。

于 2011-09-12T17:58:39.923 に答える