我正在通过系统事件队列推送我自己的测试事件队列。在TestEQueue中,我通过一次super.dispatchEvent调用重载了dispatchEvent方法
TestEQueue mytestqueue = new TestEQueue();
Toolkit.getDefaultToolkit().getSystemEventQueue().push(TestEQueue);但是由于某些原因,使用AccessControlException在新的TestQueue中调度失败。其中,在没有TestEQueue的情况下,相同的事件在主程序中被成功调度。
这怎么可能,因为两个队列将在同一个线程组中运行?如何调试此问题?这是一个非常大的测试代码库的一部分,所以我无法复制函数代码。这能与安全管理器相关吗?
发布于 2011-09-16 03:29:05
没有人知道你是如何构建你的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() {
}
}发布于 2011-09-16 07:34:17
请注意,push()将替换现有的EventQueue;它不会添加新的队列。我认为你的问题的前提可能是不正确的。另请参阅此Q&A。
https://stackoverflow.com/questions/7435987
复制相似问题