我正在尝试通过将所有帧显示为JPanel
个对象并使用BufferedImage
在{{1}中调用Thread
来在g.drawImage
中绘制动画每个帧的JPanel
方法,其间有睡眠。我的理解是,只要paintComponent(Graphics g)
是来自g.drawImage
的{{1}}对象,就可以从任何地方调用g
,这会导致Graphics
中的像素成为已更新,但paintComponent
没有变化。这不是JPanel
的工作方式,还是使用其他JPanel
或其他所有内容的问题?我的代码的缩写版本如下,删除了不必要的位
Graphics.drawImage
答案 0 :(得分:1)
您当前的绘画代码是错误的。绘画方法仅用于绘画。你永远不会从绘画方法开始一个线程。您无法控制何时调用绘制方法,并且每次调用该方法时都会启动另一个Thread。
Graphics对象应仅用作绘制方法持续时间内存在的短持续时间对象。您不应该尝试无限期地保留对该对象的引用。
我正在尝试绘制动画
如果你想做动画,那么你可以使用Swing Timer来安排动画。
所以你应该将图像作为类的属性。然后当Timer
触发时,您更改了图片属性并在面板上调用repaint()
。