我在系统事件队列上推送了自己的测试事件队列。在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

有用的infoshere

出于我的好奇心,如果您的测试以成功告终,那么请使用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() {
    }
}

07-24 20:53