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()
{
// ...
}
});