我在System eventqueue上推送自己的测试事件队列。在TestEQueue中,我通过一次调用super.dispatchEvent重载了dispatchEvent方法
TestEQueue mytestqueue = new TestEQueue();
Toolkit.getDefaultToolkit().getSystemEventQueue().push(TestEQueue);
但由于某些原因,新的TestQueue中的调度因AccessControlException而失败。在没有TestEQueue的情况下在主程序中成功调度相同事件的位置。
如果这两个队列都在同一个线程组中运行,那怎么可能呢?我该如何调试此问题?这是一个非常大的测试代码库的一部分,所以我无法复制功能代码。这可能与安全经理有关吗?
答案 0 :(得分:1)
没有人知道你是如何构建自己的own test event queue over the System eventqueue
的,也许你错过了invokeAndWait
,
只是我的好奇心,如果你的测试成功结束,那么请用SwingUtilities.invokeAndWait
测试,如果有一些差异(等待什么),我标记你的线程通知任何变化: - )
此代码应该用于测试目的,
import java.awt.AWTEvent;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.lang.reflect.InvocationTargetException;
public class QueueTest {
public static void main(String[] args) throws InterruptedException, InvocationTargetException {
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEventQueue());
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
System.out.println("Run");
}
});
}
private static class MyEventQueue extends EventQueue {
@Override
public void postEvent(AWTEvent theEvent) {
System.out.println("Event Posted");
super.postEvent(theEvent);
}
}
private QueueTest() {
}
}
答案 1 :(得分:1)
请注意push()
替换现有的EventQueue
;它不会添加新队列。我认为你的问题的前提可能是错误的。另请参阅此Q&A。