È possibile provare a ignorare EventQueue
e stampare stacktrace per gli eventi pubblicati. Anche nell'esempio qui sotto un numero univoco verrebbe assegnato a ogni evento pubblicato. Quando invokeLater
sarebbe stato chiamato da altri invokeLater
allora il testo postEvent 9 from 7
sarebbe stampato nel registro
// Place this code somewhere in the main class to override queue
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEventQueue());
Dove classe MyEventQueue potrebbe essere simile a questo:
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);
}
}
Avete trovato soluzioni accettabili?Davvero interessato a sapere cosa hai fatto alla fine :) – Twister