You can try to override EventQueue
and print stacktrace for posted events. Also in the example below a unique number would be assigned to each posted event. When invokeLater
would be called from other invokeLater
then the text postEvent 9 from 7
would be printed in the log
// Place this code somewhere in the main class to override queue
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEventQueue());
Where class MyEventQueue might look like this:
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);
}
}