2011-12-12 4 views
3

私はJavaにはかなり新しいので、この初心者の質問には申し訳ありません。JButtonでのアクション後のフリーズを避ける

私はJButtonを持っていますが、これをクリックすると、いくつかのMySQLクエリがトリガされ、2,3秒間表示されます。この間私のユーザーインターフェイスは完全にフリーズします。それを避ける方法はありますか? 多分、私は同期、スレッドまたはrunnableのようなものを使用する必要がありますが、私は非常によく理解していません。 誰かが私を説明できますか?

ありがとうございました。

よろしくお願いいたします。

ヴィンセント

答えて

2

ユーザーインターフェイスと同じスレッド上でクエリを実行しているため、そのスレッドは、したがって「フリーズ」その間に任意のユーザコマンドを受信することができません。

解決策は、新しいスレッドを開始し、クエリを並列に実行し、次にSwingUtilities.invokeLaterのようなものを使用してuiを更新することです。ような何か:UIスレッド上で保留中のすべてのイベントが処理されるまで

// button action listener code 

Thread t = new Thread(new Runnable() { 
    public void run() { 

     // execute query here 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 

       // update the ui here 

      } 
     }); 
    } 
}); 
t.start(); 

SwingUtilities.invokeLaterが効果的に更新アクションをキューに入れます。 javadoc hereを読んでください。

関連する問題