Вы можете попробовать переопределить EventQueue
и распечатать трассировку стека для опубликованных событий.Также в приведенном ниже примере каждому номеру события будет присвоен уникальный номер.Когда invokeLater
будет вызван из другого invokeLater
, тогда текст postEvent 9 from 7
будет напечатан в журнале
// Place this code somewhere in the main class to override queue
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEventQueue());
Где класс MyEventQueue может выглядеть так:
import java.awt.AWTEvent;
import 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 event) {
if (event instanceof InvocationEvent) {
currentEvent = event;
}
super.dispatchEvent(event);
currentEvent = null;
}
public void postEvent(AWTEvent event) {
if (event instanceof InvocationEvent) {
currentNumber = currentNumber + 1;
eventIdMap.put(event, currentNumber);
System.out.println("postEvent " + currentNumber + " " +
(currentEvent != null ? "from " + eventIdMap.get(currentEvent) : "") );
for(StackTraceElement element : new RuntimeException().getStackTrace()) {
System.out.println("\t" + element);
}
}
super.postEvent(event);
}
}