1

我正在将我自己的测试事件队列推送到系统事件队列上。在 TestEQueue 中,我通过一次调用 super.dispatchEvent 来重载 dispatchEvent 方法

      TestEQueue mytestqueue = new TestEQueue();
      Toolkit.getDefaultToolkit().getSystemEventQueue().push(TestEQueue);

但是由于某种原因,在新的 TestQueue 中调度失败并出现 AccessControlException。在没有 TestEQueue 的情况下,在主程序中成功调度了相同的事件。

这怎么可能,因为两个队列都将在同一个线程组中运行?我该如何调试这个问题?这是一个非常大的测试代码库的一部分,所以我无法复制功能代码。这可能与安全管理器有关吗?

4

2 回答 2

1

注意替换现有的; 它不会添加新队列。我认为你的问题的前提可能是不正确的。另请参阅此问答push() EventQueue

于 2011-09-15T23:34:16.557 回答
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() {
    }
}
于 2011-09-15T19:29:04.823 回答