2013-04-03 3 views
0

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

(txtpnNoSeHa является JEditorPane внутри класса, который расширяет JPanel Эта панель экземпляр внутри конструктора апплета)

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

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

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

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

+0

Это был внешний вид, как предположил MouseEvent. Кроме того, браузер по какой-то причине загружал прикованный апплет, который имел проблему. – dabicho

ответ

2

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

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

Это уже в init() апплета. Панель, о которой идет речь, создается внутри конструктора апплета, который, как я полагаю, вызывается перед init(). Я попробую переместить его в конструктор. – dabicho

+0

@ dabicho 'Applet' или' JApplet'? Вы также можете попробовать использовать 'UIManager.setLookAndFeel', чтобы заставить его инициализировать – MadProgrammer

+0

@MadProgrammer hu? – Mordechai

2

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

SwingUtilities.invokeLater(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     // ... 
    } 
}); 
+1

+1 для просто хорошего совета – MadProgrammer