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 组件的所有修改都需要从事件调度线程执行。您应该将已实现的四个线程移除并从主线程执行所有操作。
我有 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 组件的所有修改都需要从事件调度线程执行。您应该将已实现的四个线程移除并从主线程执行所有操作。