NullPointerException в javax.swing.plaf.synth.SynthContext.getPainter - PullRequest
2 голосов
/ 25 февраля 2011

Программа на 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)

Ответы [ 4 ]

4 голосов
/ 21 ноября 2012

Иногда я получаю ту же ошибку при вызове:

 JComponent.updateUI() 

используя Nimbus Look & Feel. В моем случае такой вызов не был необходим, поэтому я удалил строку.

3 голосов
/ 25 февраля 2011

Это довольно популярная ошибка, если вы выполняете поиск в Google.

Один из сайтов предлагает следующее:

замена строки

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

с:

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

0 голосов
/ 21 января 2019

У меня была та же проблема, и я смог ее исправить, у меня есть два предложения, если вы используете SwingWorkers.

1) В методе doInBackground вашего работника попробуйте перехватить любые Runtime или необработанные исключения, чтобы вы моглиубедитесь, что ваш метод не завершает работу, прежде чем думать, что это так.

2) Убедитесь, что вы не обновляете какой-либо компонент Swing, кроме событий изменения свойств рабочего.Помните, что все компоненты Swing должны обновляться только в потоке событий, а не в потоке рабочего.

Надеюсь, это поможет.

0 голосов
/ 06 декабря 2011

Я получил эту ошибку после попытки перекрасить компонент Swing следующим способом:

SwingUtilities.updateComponentTreeUI(COMPONENT); 

где COMPONENT - компонент качания, который необходимо перекрасить.

Я наконец решил эту проблему, заменив код выше на этот

COMPONENT.validate();
COMPONENT.repaint();
...