2013-04-03 51 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