У меня есть приложение Swing с Nimbus l & f. Иногда я получаю это исключение, но я не знаю, где это срабатывает, и как его избежать, потому что все источники из классов библиотеки Java в стеке трассировки. Является ли это проблемой Java или моей проблемой?Как избежать этого исключения ClassCastException?
Некоторая информация о моей системе:
avaVersion = 1.8.0_20
OSNAME = Linux
OSVersion = 3.15.10-201.fc20.x86_64
Исключение сообщение:
java.lang.ClassCastException: java.awt.Font cannot be cast to javax.swing.Painter
javax.swing.plaf.nimbus.NimbusStyle.getBackgroundPainter(NimbusStyle.java:708)
javax.swing.plaf.nimbus.SynthPainterImpl.paintBackground(SynthPainterImpl.java:99)
javax.swing.plaf.nimbus.SynthPainterImpl.paintPanelBackground(SynthPainterImpl.java:957)
javax.swing.plaf.synth.SynthPanelUI.update(SynthPanelUI.java:154)
javax.swing.JComponent.paintComponent(JComponent.java:777)
javax.swing.JComponent.paint(JComponent.java:1053)
javax.swing.JComponent.paintToOffscreen(JComponent.java:5223)
javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290)
javax.swing.RepaintManager.paint(RepaintManager.java:1265)
javax.swing.JComponent._paintImmediately(JComponent.java:5171)
javax.swing.JComponent.paintImmediately(JComponent.java:4982)
javax.swing.RepaintManager$4.run(RepaintManager.java:824)
javax.swing.RepaintManager$4.run(RepaintManager.java:807)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:807)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:782)
javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:731)
javax.swing.RepaintManager.access$1300(RepaintManager.java:64)
javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1720)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
java.awt.EventQueue.access$400(EventQueue.java:97)
java.awt.EventQueue$3.run(EventQueue.java:697)
java.awt.EventQueue$3.run(EventQueue.java:691)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
java.awt.Font cannot be cast to javax.swing.Painter
EDIT:
Если последовательность и происходит очень часто, я могу быть в состоянии понять это.
Я также не могу попробовать бросить шрифт художнику.
EDIT2:
Полный стек исключение здесь копируется.
EDIT3
Графический интерфейс приложения часть начинается в течение SwingUtilities.invokeAndWait().
Я также использую свою машину Win7 раньше, но никогда не получаю ее на Win7. Это приложение уже существует 1 год.
Опубликовать [mcve] ... – Reimeus
Это исключение можно избежать, если вы не попробуете придать 'Font'' 'Painter'. – dasblinkenlight
У вас есть прерывистая ошибка, которая настоятельно предлагает проблему параллелизма или потоков. Вы начинаете графический интерфейс в потоке событий Swing? Обязательно сделайте это, особенно с некоторыми Look & Feels, такими как Nimbus. Другими словами - создайте свой GUI в Runnable и очередь, которая находится в очереди событий Swing, используя 'SwingUtilities.invokeLater (...)'. –