SecondaryLoopを使用してイベント・ディスパッチ・スレッド上で別途イベント・ループを実行する
Total: 4591
, Today: 2
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
SecondaryLoop
を使用して、イベント・ディスパッチ・スレッドをブロックせずに、別スレッドをイベント・ループを実行します。
Screenshot
Advertisement
サンプルコード
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
を使用してバックグラウンドで処理を実行している間はイベント・ディスパッチ・スレッドをブロックしないよう設定しています。
参考リンク
- Hidden Java 7 Features – SecondaryLoop @ sellmic.com
- SecondaryLoop (Java Platform SE 8)
- JLayerで指定したコンポーネントへの入力を禁止