簡體   English   中英

javax.swing.plaf.synth.SynthContext.getPainter上的NullPointerException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM