2012-04-16 21 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