UIManager.getColor иногда возвращает ноль

У меня есть апплет, который генерирует исключение nullpointer в этой строке (но только иногда) во время загрузки:

(txtpnNoSeHa - это JEditorPane внутри класса, расширяющего JPanel. Эта панель создается внутри конструктора апплета)

txtpnNoSeHa.setBackground(UIManager.getColor("Panel.background"));

вызывается внутри конструктора.

Из этого я понимаю, что UIManager.getColor иногда возвращает значение null, возможно, из-за того, что некоторые данные не были загружены (не отображалась качающаяся панель или что-то подобное)

Апплет был разработан с помощью конструктора окон Eclipse. Как я могу это исправить? Кто-нибудь может пролить свет на это?

2 ответа

Решение

Как вы и предсказывали, UIManager загружается, как только первый компонент свинга становится видимым. Это может привести к null ценности. Вы можете вручную загрузить UIManager с этим вызовом в начале main рутина (или init для апплетов):

try {
    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch(InvocationTargetException | UnsupportedLookAndFeelException e) {
    e.printStackTrace(); 
}

В прошлом у меня была похожая проблема, и я решил ее, создав каждый код, связанный с колебаниями, для запуска из потока GUI (EDT).

SwingUtilities.invokeLater(new Runnable()
{
    @Override
    public void run()
    {
        // ...
    }
});
Другие вопросы по тегам