2012-01-05 65 views
2

所以我有一個Swing GUI的地方我改變它的默認外觀和使用這樣的事情感到基於從另一個GUI類的一些輸入:Swing GUI的拋出異常,同時試圖改變GUI實時

javax.swing.UIManager.setLookAndFeel("newlook&feel"); 
SwingUtilities.updateComponentTreeUI(this); 
pack(); 

這工作得很好,但卻在控制檯上我看到每次這個被稱爲引發異常,像消息:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 

,它是指從它們內部的Java類的類行號。這裏有什麼問題或者我錯過了什麼。

只是一點,SwingUtilities.isEventDispatchThread()在這種情況下返回false

+1

你能否給我們完整的異常跟蹤和你的類定義? – shybovycha 2012-01-05 10:58:33

+0

@shybovycha,它會太長,基本上我所做的就是從另一個類調用此GUI類的靜態方法並更新一個靜態變量。一旦更新,我就調用這個類中的GUI外觀和感覺更新方法,它基本上運行上面3行代碼來更新。它工作正常,但我看到很多來自java內部類的控制檯中的異常。這裏是錯誤日誌:http://www.file-upload.net/download-4004773/log.txt.html – Johnydep 2012-01-05 11:31:09

回答

6

只是一點,SwingUtilities.isEventDispatchThread()在 在這種情況下返回false。

也許這就是問題,你有沒有試過調用EDT Thread中的L & F?

SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
     javax.swing.UIManager.setLookAndFeel("newlook&feel"); 
     SwingUtilities.updateComponentTreeUI(OuterClassName.this); 
     pack(); 
     } 
     }); 
+0

謝謝,但問題是與此,我得到編譯時錯誤說方法updateComponentTreeUI()類型 swingUtilities不適用於參數(新的Runnable(){}) – Johnydep 2012-01-05 11:35:27

+0

@Wojtek O.你在問題的正確軌道上,但是當你在新的Runnable()中引用它時,它不會像你一樣傳遞外部對象期望。您需要在新的Runnable中手動傳遞外部對象,並將該對象的方法作爲參數調用。 – Tudor 2012-01-05 11:39:36

+0

@Johnydep:因爲'this'在這裏解析爲Runnable。你需要使用像'MyJFrame.this'這樣的東西來引用你的框架。否則,這個解決方案應該適合你。 – 2012-01-05 11:39:39