AWT EventQqueue AccessControlException
Я помещаю свою собственную очередь тестовых событий в очередь системных событий. И в TestEQueue я перегрузил метод dispatchEvent одним вызовом super.dispatchEvent
TestEQueue mytestqueue = new TestEQueue();
Toolkit.getDefaultToolkit().getSystemEventQueue().push(TestEQueue);
Но по какой-то причине диспетчеризация в новом TestQueue завершается с AccessControlException. Куда же событие успешно отправлено в основной программе без TestEQueue.
Как это возможно, поскольку обе очереди будут работать в одной и той же группе потоков? Как я могу отладить эту проблему? Это часть очень большой тестовой базы кода, поэтому я не могу скопировать функциональный код. Это может быть связано с менеджером безопасности?
2 ответа
Обратите внимание, что push()
заменяет существующий EventQueue
; это не добавляет новую очередь. Я думаю, что предпосылка вашего вопроса может быть неверной. Смотрите также этот Q & A.
Никто не знает, как ты построил свой 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() {
}
}