![](/img/trans.png)
[英]Usage of ReentrantReadWriteLock in javax.swing.plaf.nimbus.ImageCache
[英]NullPointerException at javax.swing.plaf.synth.SynthContext.getPainter
我正在使用的Java Swing程序不斷出現以下異常。 它在隨機時間發生,並且遠非可復制。 除了未按時觸發動作事件外,它似乎通常不會引起任何問題,但通常即使在此異常發生后,一切仍能正常進行。 它的發生似乎並不一致。 有人有什么建議嗎? 我要提到的是,我們使用的是靈氣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)
調用時有時會出現相同的錯誤:
JComponent.updateUI()
使用Nimbus外觀。 就我而言,這種調用不是必需的,因此我刪除了該行。
如果您在Google中搜索,這是一個非常流行的錯誤。
其中一個站點建議這樣做:
更換線
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
有:
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
我遇到了同樣的問題,並且能夠解決它,如果您使用的是SwingWorkers,則有兩個建議。
1)在工作人員的doInBackground方法中嘗試捕獲任何運行時或未捕獲的異常,因此可以在您認為自己的方法沒有退出之前對其進行驗證。
2)確認您沒有在工作人員的屬性更改事件之外更新任何Swing組件。 請記住,僅在事件線程中而不在工作線程中更新所有swing組件。
希望這可以幫助。
我嘗試使用以下方法重新繪制swing組件后收到此錯誤:
SwingUtilities.updateComponentTreeUI(COMPONENT);
其中COMPONENT
是需要重繪的Swing組件。
我終於解決了這個問題,用上面的代碼替換了上面的代碼
COMPONENT.validate();
COMPONENT.repaint();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.