有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java AWT EventQqueue AccessControlException

我将自己的测试事件队列推到系统事件队列上。在TestEQueue中,我用一个对super的调用重载了dispatchEvent方法。调度事件

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

但由于某些原因,在新测试队列中的调度失败,并出现AccessControlException。其中,同一事件在主程序中成功调度,无需测试队列

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


共 (2) 个答案

  1. # 1 楼答案

    注意^{}取代了现有的^{};它不会添加新队列。我认为你问题的前提可能不正确。另见本Q&A

  2. # 2 楼答案

    没人知道你是怎么建立你的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() {
        }
    }