нулевые pData в aplet’е

#java #null #applet

#java #null #апплет

Вопрос:

У меня есть Java-апплет, из которого я пытаюсь вызвать getContext().showDocument(aUrl) для перехода на другую веб-страницу. Хотя браузер правильно переходит на новую страницу, я продолжаю получать это неприятное исключение в консоли плагина Java:

 Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException: null pData
    at sun.awt.windows.WComponentPeer.getLocationOnScreen(Native Method)
    at java.awt.Component.getLocationOnScreen_NoTreeLock(Unknown Source)
    at java.awt.Component.getLocationOnScreen(Unknown Source)
    at java.awt.LightweightDispatcher$3.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
  

При вызове showDocument() метода элемент управления находится внутри потока отправки событий AWT, и я считаю, что исключение выдается при загрузке новой страницы до того, как поток отправки событий завершил обработку текущего события, а апплет уже запущен .

Исключение кажется безвредным, хотя я заметил, что при его возникновении destroy() метод апплета больше не вызывается, что теоретически может привести к проблемам.

Поиск в Google по этой проблеме выдает множество отчетов о похожих проблемах, но четкого решения нет. У кого-нибудь есть идеи, как я могу преодолеть эту проблему? Это известная ошибка? Есть ли быстрое исправление или что-то в этомроде?

С наилучшими пожеланиями, Дэн.

Ответ №1:

Вам может помочь программа invokeLater от SwingUtilities. Идея состоит в том, чтобы отменить вызов show document после того, как все события были обработаны. Просто создайте исполняемый экземпляр с вашим кодом и вызовите его.