2012-04-16 123 views
1

我正在开发一个简单的java游戏,我的滚动条引发异常。 滚动条应该是“游戏滑板”。Java游戏 - ClassCastException

异常在线程 “线程3” java.lang.ClassCastException:sun.java2d.NullSurfaceData不能sun.java2d.d3d.D3DRenderer.copyArea被转换为sun.java2d.d3d.D3DSurfaceData (来源不明) 在sun.java2d.d3d.D3DSurfaceData.copyArea(未知来源) 在sun.java2d.SunGraphics2D.doCopyArea(未知来源) 在sun.java2d.SunGraphics2D.copyArea(未知来源) 在javax.swing.BufferStrategyPaintManager。在javax.swing.RepaintManager.copyArea上的未知来源 ewport.windowBlitPaint(Unknown Source) at javax.swing.JViewport.setViewPosition(Unknown Source) at javax.swing.plaf.basic.BasicScrollPaneUI $ Handler.hsbStateChanged(Unknown Source) at javax.swing.plaf.basic.BasicScrollPaneUI $ Handler.stateChanged(来源不明) 在javax.swing.DefaultBoundedRangeModel.fireStateChanged(来源不明) 在javax.swing.DefaultBoundedRangeModel.setRangeProperties(来源不明) 在javax.swing.DefaultBoundedRangeModel.setValue(来源不明) 在使用javax .swing.JScrollBar.setValue(Unknown Source) at GameEnvironment.GamePanel.gameUpdate(GamePanel.java:171) at GameEnvironment.GamePanel.run(GamePanel.java:73) at java.lang.Thread.run(Unknown S)乌尔斯河)

代码行是以下:

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

的异常会被或多或少随机地上升。到目前为止我还没有弄明白。

回答

3

我会确保此代码在GUI事件线程上运行。如果您在其他线程上调用Swing组件,则可能会出现奇怪的randonm错误。使用SwingUtilities.invokeLater(Runnable)可以执行更新Swing组件的任务。

+0

非常感谢!这解决了我的问题。我就像在文档中那样做了。 '可运行scrollToPlayer =新的Runnable(){ \t \t \t公共无效的run(){ \t \t \t \t scrollPane.getHorizo​​ntalScrollBar()的setValue(player.getX() - (widthHorizo​​ntalScrollBar/2))。 \t \t \t} \t \t \t}; \t \t \t SwingUtilities.invokeLater(scrollToPlayer);' – gosua 2012-04-16 16:40:06