• 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);
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 in GitHub: Java, Kotlin

解説

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

参考リンク

コメント