Swing UI 刷新:后台线程打印异常

Swing UI Refresh: Background thread prints exception

我有 Jframe,我在其中显示 JTree。由于我有大量节点要添加,我所做的是创建 4 个线程,这些线程不断将节点添加到树中。

使新添加的节点在 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)

此外,如上所示,异常堆栈跟踪发生了变化。我无法弄清楚这可能是什么原因。我还同步了代码,以便在刷新框架时不会添加新节点。但是没有用。

遇到这种情况请指教我该怎么办

谢谢

Swing 不是线程安全的。对 Swing UI 组件的所有修改都需要从事件调度线程执行。您应该将已实现的四个线程移除并从主线程执行所有操作。