Możesz spróbować zastąpić EventQueue
i wydrukować stos dla opublikowanych wydarzeń. Również w poniższym przykładzie unikalny numer zostanie przypisany do każdego wysłanego wydarzenia. Kiedy invokeLater
byłyby należne od innych invokeLater
postEvent 9 from 7
wtedy tekst będzie drukowany w dzienniku
// Place this code somewhere in the main class to override queue
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEventQueue());
Gdzie klasa MyEventQueue może wyglądać następująco:
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);
}
}
Znaleźliście jakieś akceptowalnych rozwiązań?Naprawdę zainteresowani, aby dowiedzieć się, co w końcu zrobiłeś :) – Twister