AWT EventQqueue AccessControlException - PullRequest
       29

AWT EventQqueue AccessControlException

1 голос
/ 15 сентября 2011

Я помещаю свою собственную очередь тестовых событий в очередь системных событий.И в TestEQueue я перегрузил метод dispatchEvent одним вызовом super.dispatchEvent

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

Но по какой-то причине диспетчеризация в новом TestQueue завершается с AccessControlException.Где, поскольку одно и то же событие успешно отправлено в основной программе без TestEQueue.

Как это возможно, поскольку обе очереди будут работать в одной группе потоков?Как я могу отладить эту проблему?Это часть очень большой тестовой базы кода, поэтому я не могу скопировать функциональный код.Может ли это быть связано с менеджером безопасности?

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

Обратите внимание, что push() заменяет существующее EventQueue; это не добавляет новую очередь. Я думаю, что предпосылка вашего вопроса может быть неверной. Смотрите также это Q & A .

1 голос
/ 15 сентября 2011

никто не знает, как вы построили 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() {
    }
}
...