EventQueue
投稿されたイベントのスタックトレースをオーバーライドして出力することができます。また、以下の例では、投稿された各イベントに一意の番号が割り当てられます。invokeLater
他から呼び出されるとinvokeLater
、テキストpostEvent 9 from 7
がログに出力されます
// このコードをメイン クラスのどこかに配置して、キューをオーバーライドします
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(新しい MyEventQueue());
クラス MyEventQueue は次のようになります。
import java.awt.AWTEvent;
java.awt.EventQueue をインポートします。
import java.awt.event.InvocationEvent;
import java.util.WeakHashMap;
public class MyEventQueue extends EventQueue {
int currentNumber = 0;
WeakHashMap<AWTEvent,Integer> eventIdMap = new WeakHashMap<AWTEvent,Integer>();
AWTEvent currentEvent = null;
protected void dispatchEvent(AWTEvent イベント) {
if (InvocationEventのイベントインスタンス) {
currentEvent = イベント;
}
super.dispatchEvent(イベント);
currentEvent = null;
}
public void postEvent(AWTEvent イベント) {
if (InvocationEventのイベントインスタンス) {
現在の番号 = 現在の番号 + 1;
eventIdMap.put(イベント、現在の番号);
System.out.println("postEvent " + currentNumber + " " +
(currentEvent != null ? "from " + eventIdMap.get(currentEvent) : "") );
for(StackTraceElement要素: new RuntimeException().getStackTrace()) {
System.out.println("\t" + 要素);
}
}
super.postEvent(イベント);
}
}