2015-04-14 78 views
0

我有我在其中顯示JTree的Jframe。由於我有大量的節點被添加,我所做的是創建4個線程,繼續添加節點到樹。Swing UI刷新:後臺線程打印異常

使新添加的節點在UI上可見。我每10秒使用一次重新加載幀,

SwingUtilities.updateComponentTreeUI(frame); 

我的幀被重新加載並且新添加的節點現在可見。但是有後臺線程在我的控制檯上打印異常。雖然它不妨礙我的UI輸出。但是,我可以知道原因,以下例外情況的原因以及如何解決此問題

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at javax.swing.plaf.basic.BasicScrollBarUI.layoutHScrollbar(BasicScrollBarUI.java:731) 
    at javax.swing.plaf.basic.BasicScrollBarUI.layoutContainer(BasicScrollBarUI.java:833) 
    at java.awt.Container.layout(Container.java:1421) 




Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at javax.swing.plaf.basic.BasicScrollPaneUI.paint(BasicScrollPaneUI.java:90) 
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143) 
    at javax.swing.JComponent.paintComponent(JComponent.java:752) 
    at javax.swing.JComponent.paint(JComponent.java:1029) 



Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at javax.swing.plaf.basic.BasicScrollBarUI.layoutVScrollbar(BasicScrollBarUI.java:638) 
    at javax.swing.plaf.basic.BasicScrollBarUI.layoutContainer(BasicScrollBarUI.java:829) 
    at java.awt.Container.layout(Container.java:1421) 
    at java.awt.Container.doLayout(Container.java:1410) 
    at java.awt.Container.validateTree(Container.java:1507) 
    at java.awt.Container.validateTree(Container.java:1513) 

另外,異常堆棧跟蹤更改如上所述。我無法弄清楚什麼是可能的原因。我還同步了代碼,以便在刷新幀時不添加新節點。但它沒有幫助。

請告訴我在這種情況下應該怎麼做。

謝謝

回答

1

擺動不是線程安全的。對Swing UI組件的所有修改都需要從事件派發線程執行。您應該刪除已經實現的四個線程,並從主線程執行所有操作。

+0

我試圖通過main()來執行它。另外,我嘗試使用SwingUtilities.invokeLater()。但異常似乎來了 –

+0

謝謝!謝謝!!爲評論。它實際上幫助我解決了我的問題。 –

+0

SwingUtilities.invokeLater(新的Runnable(){ \t \t \t \t \t公共無效的run(){ \t \t \t \t \t \t SwingUtilities.updateComponentTreeUI(幀); \t \t \t \t \t \t \t \t \t \t \t }} \t \t \t \t); –