AWT EventQqueue AccessControlException

发布于 2024-12-05 05:29:08 字数 427 浏览 2 评论 0原文

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

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

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

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

I am pushing my own test event queue over the System eventqueue. And in TestEQueue I have over loaded the dispatchEvent method with one call to super.dispatchEvent

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

But for some reason dispatching in the new TestQueue fails with AccessControlException. Where as the same event is successfully dispatched in the main program without TestEQueue.

How can this be possible as both the queues will running in the same thread group? How can I debug this issue? This is part of a very large test codebase, so I am not able to copy the functional code. Can this be related to security manager?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

堇色安年 2024-12-12 05:29:08

没有人知道你如何在系统事件队列上构建自己的测试事件队列,也许你会错过那里的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() {
    }
}

nobody know how do you built your own test event queue over the System eventqueue, maybe you miss there invokeAndWait,

useful infos and here

just my curiosity, if your test ends with success, then please test that with SwingUtilities.invokeAndWait, if there some differencies (awaiting nothing), and I marked your thread for notifying any changes :-)

this code should be works for Testing purposes,

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() {
    }
}
无所谓啦 2024-12-12 05:29:08

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

Note that push() replaces the existing EventQueue; it doesn't add a new queue. I think the premise of your question may be incorrect. See also this Q&A.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文