2012-04-16 3 views
1

Я разрабатываю простую java-игру, и моя полоса прокрутки создает исключение. Полоса прокрутки должна быть «игровым игроком».Java Game - ClassCastException

Исключение в потоке "Thread-3" java.lang.ClassCastException: sun.java2d.NullSurfaceData не может быть приведен к sun.java2d.d3d.D3DSurfaceData на sun.java2d.d3d.D3DRenderer.copyArea (Unknown Source) в sun.java2d.d3d.D3DSurfaceData.copyArea (Unknown Source) в sun.java2d.SunGraphics2D.doCopyArea (Unknown Source) в sun.java2d.SunGraphics2D.copyArea (Unknown Source) в javax.swing.BufferStrategyPaintManager. copyArea (Неизвестный источник) на javax.swing.RepaintManager.copyArea (Неизвестный источник) на javax.swing.JViewport.blitDoubleBuffered (Неизвестный источник) на javax.swing.JVi ewport.windowBlitPaint (Unknown Source) в javax.swing.JViewport.setViewPosition (Unknown Source) в javax.swing.plaf.basic.BasicScrollPaneUI $ Handler.hsbStateChanged (Unknown Source) в javax.swing.plaf.basic.BasicScrollPaneUI $ Handler.stateChanged (Unknown Source) в javax.swing.DefaultBoundedRangeModel.fireStateChanged (Unknown Source) в javax.swing.DefaultBoundedRangeModel.setRangeProperties (Unknown Source) в javax.swing.DefaultBoundedRangeModel.setValue (Unknown Source) в javax .swing.JScrollBar.setValue (Неизвестный источник) в GameEnvironment.GamePanel.gameUpdate (GamePanel.java:171) в GameEnvironment.GamePanel.run (GamePanel.java:73) на java.lang.Thread.run (Неизвестно S сходный код)

Код строки следующий:

 if (reachedMiddle) 
     scrollPane.getHorizontalScrollBar().setValue(player.getX() - (widthHorizontalScrollBar/2)); 

Исключение будет повышена более или менее случайно. Пока я этого не понял.

ответ

3

Я бы удостоверился, что этот код запущен в потоке событий GUI. Если вы вызываете компоненты Swing на другие потоки, вы можете получить странные ошибки randonm.

Посмотрите на использование SwingUtilities.invokeLater(Runnable) для выполнения задач, в которых обновлены компоненты Swing.

+0

Большое вам спасибо! Это решило мою проблему. Я сделал это точно так же, как в документации. 'Runnable scrollToPlayer = новый Runnable() { \t \t \t общественного недействительными запуска() { \t \t \t \t scrollPane.getHorizontalScrollBar() SetValue (player.getX() - (widthHorizontalScrollBar/2)). \t \t \t \t \t \t}; \t \t \t SwingUtilities.invokeLater (scrollToPlayer); ' – gosua