1

単純な Java ゲームを開発していますが、スクロールバーで例外が発生しています。スクロールバーは「gameslider」であるはずです。

スレッド「Thread-3」での例外 java.lang.ClassCastException: sun.java2d.NullSurfaceData は、sun.java2d.d3d.D3DRenderer.copyArea で sun.java2d.d3d.D3DSurfaceData にキャストできません (不明なソース)。 .D3DSurfaceData.copyArea(不明なソース)、sun.java2d.SunGraphics2D.doCopyArea(不明なソース)、sun.java2d.SunGraphics2D.copyArea(不明なソース)、javax.swing.BufferStrategyPaintManager.copyArea(不明なソース)、javax.swing.RepaintManager javax.swing.JViewport.blitDoubleBuffered (不明なソース) の .copyArea (不明なソース) javax.swing.JViewport.windowBlitPaint (不明なソース) で javax.swing.JViewport.setViewPosition (不明なソース) javax.swing.plaf.basic の .BasicScrollPaneUI$Handler.hsbStateChanged(不明なソース)。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(不明なソース)GamePanel.gameUpdate(GamePanel.java:171) at GameEnvironment.GamePanel.run(GamePanel.java:73) at java.lang.Thread.run(不明なソース)GamePanel.gameUpdate(GamePanel.java:171) at GameEnvironment.GamePanel.run(GamePanel.java:73) at java.lang.Thread.run(不明なソース)

コード行は次のとおりです。

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

例外は多かれ少なかれランダムに発生します。私はこれまでそれを理解していませんでした。

4

1 に答える 1

3

このコードが GUI イベント スレッドで実行されることを確認します。他のスレッドで Swing コンポーネントを呼び出すと、奇妙で​​ランダムなエラーが発生する可能性があります。

Swing コンポーネントが更新されるタスクを実行するためにSwingUtilities.invokeLater(Runnable)を使用する方法をご覧ください。

于 2012-04-16T16:32:39.483 に答える