我有一个applet在加载时在这一行生成一个nullpointer异常(但有时只是):
(txtpnNoSeHa是扩展JPanel的类中的JEditorPane。此面板在applet构造函数中实例化)
txtpnNoSeHa.setBackground(UIManager.getColor("Panel.background"));
在构造函数内部调用。
我从中理解的是UIManager.getColor有时可能因为某些数据尚未加载而返回null(没有显示swing面板或类似的东西)
applet是用eclipse的窗口构建器设计的。我怎样才能解决这个问题?任何人都可以对此有所了解吗?
答案 0 :(得分:2)
正如您所预测的那样,只要第一个挥杆组件可见,就会加载UIManager
。这可能会导致null
值。您可以在UIManager
例程的开头(或main
小程序)时通过此次调用手动加载init
:
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch(InvocationTargetException | UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
答案 1 :(得分:2)
过去我遇到过类似的问题,我通过将每个与swing相关的代码从GUI线程(EDT)运行来解决它。
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
// ...
}
});