2012-04-16 5 views
1

간단한 자바 게임을 개발 중이며 스크롤바가 예외를 발생시키고 있습니다. 스크롤바는 "gameslider"라고되어 있습니다.자바 게임 - ClassCastException

예외 스레드에서 "스레드 3"java.lang.ClassCastException가 : sun.java2d.NullSurfaceData가 sun.java2d.d3d.D3DRenderer.copyArea에서 sun.java2d.d3d.D3DSurfaceData 캐스트 할 수없는 (알 수없는 소스)에 javax.swing.BufferStrategyPaintManager sun.java2d.SunGraphics2D.copyArea에서 sun.java2d.SunGraphics2D.doCopyArea (알 소스)에 sun.java2d.d3d.D3DSurfaceData.copyArea (알 소스) (알 소스)에 . copyArea (알 수없는 소스) 에서 javax.swing.RepaintManager.copyArea (알 수없는 소스) 에서 javax.swing.JViewport.blitDoubleBuffered (알 수없는 소스) at javax.swing.JVi javax.swing.plaf.basic.BasicScrollPaneUI에에서 javax.swing.plaf.basic.BasicScrollPaneUI에 $ Handler.hsbStateChanged에서 javax.swing.JViewport.setViewPosition (알 수없는 소스) (알 수없는 소스) 에서 ewport.windowBlitPaint (알 수없는 소스) javax의에서 javax.swing.DefaultBoundedRangeModel.setValue (알 수없는 소스) 에서 javax.swing.DefaultBoundedRangeModel.fireStateChanged (알 수없는 소스) javax.swing.DefaultBoundedRangeModel.setRangeProperties에서 (알 수없는 소스) 에서 $ Handler.stateChanged (알 수없는 소스) .swing.JScrollBar.setValue (알 수없는 소스) GameEnvironment.GamePanel.gameUpdate (GamePanel.java:171)에서 GameEnvironment.GamePanel.run (GamePanel.java:73)에서 at java.lang.Thread.run (알 수없는 S ource)

코드 라인은 다음입니다 :

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

예외가 더 많거나 적은 무작위로 발생합니다. 나는 그것을 지금까지 이해하지 못했다.

답변

3

이 코드가 GUI 이벤트 스레드에서 실행되는지 확인해야합니다. 다른 스레드에서 Swing 구성 요소를 호출하면 이상한 randonm 오류가 발생할 수 있습니다.

SwingUtilities.invokeLater(Runnable)을 사용하여 스윙 구성 요소가 업데이트되는 작업을 수행하십시오.

+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