Sie können versuchen, EventQueue
zu überschreiben und StackTrace für gepostete Ereignisse zu drucken. Auch im folgenden Beispiel würde jedem gebuchten Ereignis eine eindeutige Nummer zugewiesen werden. Wenn invokeLater
würde von anderen invokeLater
dann wird der Text postEvent 9 from 7
würde gedruckt im Protokoll
// Place this code somewhere in the main class to override queue
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEventQueue());
Wo Klasse MyEventQueue könnte wie folgt aussehen genannt werden:
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);
}
}
Haben Sie keine akzeptable Lösungen finden?Wirklich interessiert zu wissen, was Sie schließlich getan haben :) – Twister