我在系统事件队列上推送了自己的测试事件队列。在TestEQueue中,我通过一次调用super.dispatchEvent重载了dispatchEvent方法。
TestEQueue mytestqueue = new TestEQueue();
Toolkit.getDefaultToolkit().getSystemEventQueue().push(TestEQueue);
但是由于某种原因,新的TestQueue中的调度失败,并出现AccessControlException。在没有TestEQueue的情况下,在主程序中成功调度了同一事件。
由于两个队列将在同一线程组中运行,这怎么可能?如何调试此问题?这是很大的测试代码库的一部分,因此我无法复制功能代码。可以和安全管理员联系吗?
最佳答案
没有人知道您如何建立own test event queue over the System eventqueue
,也许您错过了invokeAndWait
,
有用的infos和here
出于我的好奇心,如果您的测试以成功告终,那么请使用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() {
}
}