概要

SecondaryLoopを使用して、イベント・ディスパッチ・スレッドをブロックせずに、別スレッドをイベント・ループを実行します。

サンプルコード

layerUI.setInputBlock(true);
final SecondaryLoop loop = Toolkit.getDefaultToolkit().getSystemEventQueue().createSecondaryLoop();
Thread work = new Thread() {
  @Override public void run() {
    doInBackground();
    layerUI.setInputBlock(false);
    loop.exit();
  }
};
work.start();
loop.enter();
view all

解説

上記のサンプルでは、JLayerで指定したコンポーネントへの入力を禁止と同様のJLayerを使用して任意のコンポーネントへの入力可不可を切り替えていますが、SwingWorkerを使用するのではなく、SecondaryLoopを使用して、バックグラウンドで処理を実行している間でも、イベント・ディスパッチ・スレッドをブロックしないようにしています。

参考リンク

コメント