Bạn có thể thử ghi đè EventQueue
và in stacktrace cho các sự kiện đã đăng. Cũng trong ví dụ dưới đây, một số duy nhất sẽ được gán cho mỗi sự kiện được đăng. Khi invokeLater
sẽ được gọi từ khác invokeLater
thì văn bản postEvent 9 from 7
sẽ được in trong bản ghi
// Place this code somewhere in the main class to override queue
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEventQueue());
đâu lớp MyEventQueue có thể trông như thế này:
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);
}
}
Bạn có tìm thấy bất kỳ giải pháp chấp nhận được?Thực sự quan tâm để biết những gì bạn cuối cùng đã làm :) – Twister