Java游戏-ClassCastException

Java游戏-ClassCastException,java,swing,java-2d,classcastexception,jscrollbar,Java,Swing,Java 2d,Classcastexception,Jscrollbar,我正在开发一个简单的java游戏,我的滚动条引发了一个异常。 滚动条应该是一个“游戏滑块” 线程“thread-3”java.lang.ClassCastException中的异常:无法将sun.java2d.NullSurfaceData转换为sun.java2d.d3d.D3DSurfaceData 位于sun.java2d.d3d.d3drender.copyrea(未知源) 位于sun.java2d.d3d.D3DSurfaceData.copyrea(未知源) 位于sun.java2d

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

线程“thread-3”java.lang.ClassCastException中的异常:无法将sun.java2d.NullSurfaceData转换为sun.java2d.d3d.D3DSurfaceData 位于sun.java2d.d3d.d3drender.copyrea(未知源) 位于sun.java2d.d3d.D3DSurfaceData.copyrea(未知源) 位于sun.java2d.SunGraphics2D.doCopyArea(未知来源) 位于sun.java2d.SunGraphics2D.copyArea(未知源) 位于javax.swing.BufferStrategyPaintManager.copyArea(未知源) 位于javax.swing.RepainManager.copyArea(未知源) 位于javax.swing.JViewport.blitDoubleBuffered(未知源) 位于javax.swing.JViewport.windowBlitPaint(未知源) 位于javax.swing.JViewport.setViewPosition(未知源) 位于javax.swing.plaf.basic.BasicScrollPaneUI$Handler.hsbStateChanged(未知源) 位于javax.swing.plaf.basic.BasicScrollPaneUI$Handler.stateChanged(未知源) 位于javax.swing.DefaultBoundedRangeModel.fireStateChanged(未知源) 位于javax.swing.DefaultBoundedRangeModel.setRangeProperties(未知源) 位于javax.swing.DefaultBoundedRangeModel.setValue(未知源) 位于javax.swing.JScrollBar.setValue(未知源) 在GameEnvironment.GamePanel.gameUpdate(GamePanel.java:171)中 在GameEnvironment.GamePanel.run(GamePanel.java:73)中 位于java.lang.Thread.run(未知源)

代码行如下:

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

异常将或多或少随机出现。到目前为止我还没有弄明白。

我会确保此代码在GUI事件线程上运行。如果在其他线程上调用Swing组件,可能会出现奇怪的randonm错误


请查看如何使用来执行更新Swing组件的任务。

非常感谢!这解决了我的问题。我做的和文档中一样<代码>Runnable scrollToPlayer=new Runnable(){public void run(){scrollPane.getHorizontalScrollBar().setValue(player.getX()-(widthHorizontalScrollBar/2));};调用器(scrollToPlayer)