Swing/SecondaryLoop のバックアップ差分(No.3)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/SecondaryLoop へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
---
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
---
* 概要 [#summary]
`SecondaryLoop`を使用して、イベント・ディスパッチ・スレッドをブロックせずに、別スレッドをイベント・ループを実行します。
#download(https://lh3.googleusercontent.com/-eAqnf0aNSsQ/VhrDDmUQQeI/AAAAAAAAODs/fwDgjYwjTbk/s800-Ic42/SecondaryLoop.png)
* サンプルコード [#sourcecode]
#code(link){{
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();
}}
* 解説 [#explanation]
上記のサンプルでは、[[JLayerで指定したコンポーネントへの入力を禁止>Swing/DisableInputLayer]]と同様の`JLayer`を使用して任意のコンポーネントへの入力可不可を切り替えていますが、`SwingWorker`を使用するのではなく、`SecondaryLoop`を使用して、バックグラウンドで処理を実行している間でも、イベント・ディスパッチ・スレッドをブロックしないようにしています。
* 参考リンク [#reference]
- [http://sellmic.com/blog/2012/02/29/hidden-java-7-features-secondaryloop/ Hidden Java 7 Features – SecondaryLoop @ sellmic.com]
-- [https://stackoverflow.com/questions/10196809/secondaryloop-instead-of-swingworker java - SecondaryLoop instead of SwingWorker? - Stack Overflow]
- [http://docs.oracle.com/javase/jp/8/docs/api/java/awt/SecondaryLoop.html SecondaryLoop (Java Platform SE 8)]
- [[JLayerで指定したコンポーネントへの入力を禁止>Swing/DisableInputLayer]]
* コメント [#comment]
#comment
#comment