2

我工作的一个 Java Swing 程序不断收到下面的异常。它发生在随机时间并且远非可重现。除了未触发按时操作事件之外,它似乎通常不会引起任何问题,但通常即使在此异常之后一切正常。它的发生似乎没有一致性。有人有什么建议吗?我应该提到我们正在使用 nimbus LAF。

java.lang.NullPointerException
at javax.swing.plaf.synth.SynthContext.getPainter(SynthContext.java:181)
at javax.swing.plaf.synth.SynthPanelUI.update(SynthPanelUI.java:95)
at javax.swing.JComponent.paintComponent(JComponent.java:752)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at org.jdesktop.jxlayer.JXLayer.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:278)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
4

4 回答 4

4

调用时有时会遇到相同的错误:

 JComponent.updateUI() 

使用 Nimbus 外观和感觉。就我而言,这种调用是不必要的,所以我删除了该行。

于 2012-11-21T04:14:49.043 回答
3

如果您在 Google 中搜索,这是一个非常流行的错误。

其中一个网站表明了这一点:

更换线路

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

和:

UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

于 2011-02-24T22:18:23.743 回答
0

尝试使用以下方法重新绘制摆动组件后出现此错误:

SwingUtilities.updateComponentTreeUI(COMPONENT); 

COMPONENT需要重新绘制的 swing 组件在哪里。

我终于解决了这个问题,用这个替换上面的代码

COMPONENT.validate();
COMPONENT.repaint();
于 2011-12-06T15:05:08.667 回答
0

我遇到了同样的问题并且能够解决它,如果您使用 SwingWorkers,我有两个建议。

1)在您的工作人员的 doInBackground 方法中尝试捕获任何运行时或未捕获的异常,因此您可以在您认为它之前验证您的方法没有退出。

2) 确认您没有在工作人员的属性更改事件之外更新任何 Swing 组件。请记住,所有的 swing 组件都应该只在事件线程中更新,而不是在工作线程中更新。

希望这可以帮助。

于 2019-01-20T23:35:53.270 回答