• category: swing folder: SecondaryLoop title: SecondaryLoopを使用してイベント・ディスパッチ・スレッド上で別途イベント・ループを実行する tags: [SecondaryLoop, InputEvent, JLayer] author: aterai pubdate: 2015-10-12T05:29:04+09:00 description: SecondaryLoopを使用して、イベント・ディスパッチ・スレッドをブロックせずに、別スレッドをイベント・ループを実行します。 image: https://lh3.googleusercontent.com/-eAqnf0aNSsQ/VhrDDmUQQeI/AAAAAAAAODs/fwDgjYwjTbk/s800-Ic42/SecondaryLoop.png

概要

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を使用してバックグラウンドで処理を実行している間でもイベント・ディスパッチ・スレッドをブロックしないようにしています。

参考リンク

コメント