概要

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

サンプルコード

layerUI.setInputBlock(true);
SecondaryLoop loop = Toolkit.getDefaultToolkit()
                            .getSystemEventQueue().createSecondaryLoop();
Thread worker = new Thread() {
  @Override public void run() {
    doInBackground();
    layerUI.setInputBlock(false);
    loop.exit();
  }
};
worker.start();
loop.enter();
View in GitHub: Java, Kotlin

解説

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

参考リンク

コメント