2013-04-03 78 views
0

我有在该线产生一个空指针异常(但仅有时)在加载时的小应用程序:UIManager.getColor返回null有时

(txtpnNoSeHa是扩展JPanel一个类中一个JEditorPane此面板是在小程序构造函数中实例化)

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

在构造函数中调用。

我从此明白的是,UIManager.getColor返回null有时也许是因为一些数据没有被加载(无摇摆面板已被证明或者类似的东西)

小程序的设计采用了Eclipse的窗口建设者。我怎样才能解决这个问题?任何人都可以对此有所了解?

+0

这是外观和感觉,因为MouseEvent建议。此外,由于某种原因,浏览器正在加载一个chached applet,这有问题。 – dabicho 2013-04-03 22:54:27

回答

2

正如您所预测的那样,UIManager会在第一个摆动部件可见时立即加载。这可能会导致null值。您可以手动在main程序(或init用于小应用程序)的开始使用该调用加载UIManager

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

这已经在applet的init()中。有问题的面板在applet构造函数中实例化,我猜想在init()之前调用该面板。我会尝试将它移到构造函数中。 – dabicho 2013-04-03 22:12:03

+0

@dabicho'Applet'或'JApplet'?你也可以尝试使用'UIManager.setLookAndFeel'来强制它初始化 – MadProgrammer 2013-04-03 22:44:04

+0

@MadProgrammer hu? – Mordechai 2013-04-03 22:47:57

2

我在过去也有类似的问题,我通过使每一次挥杆相关解决它代码从GUI线程(EDT)运行。

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

+1只是一般的好建议 – MadProgrammer 2013-04-03 22:44:22