另一个Thread的Graphics.drawImage在Java Swing中没有绘制任何东西

时间:2016-11-08 16:31:39

标签: java multithreading image swing graphics

我正在尝试通过将所有帧显示为JPanel个对象并使用BufferedImage在{{1}中调用Thread来在g.drawImage中绘制动画每个帧的JPanel方法,其间有睡眠。我的理解是,只要paintComponent(Graphics g)是来自g.drawImage的{​​{1}}对象,就可以从任何地方调用g,这会导致Graphics中的像素成为已更新,但paintComponent没有变化。这不是JPanel的工作方式,还是使用其他JPanel或其他所有内容的问题?我的代码的缩写版本如下,删除了不必要的位

Graphics.drawImage

1 个答案:

答案 0 :(得分:1)

您当前的绘画代码是错误的。绘画方法仅用于绘画。你永远不会从绘画方法开始一个线程。您无法控制何时调用绘制方法,并且每次调用该方法时都会启动另一个Thread。

Graphics对象应仅用作绘制方法持续时间内存在的短持续时间对象。您不应该尝试无限期地保留对该对象的引用。

  

我正在尝试绘制动画

如果你想做动画,那么你可以使用Swing Timer来安排动画。

所以你应该将图像作为类的属性。然后当Timer触发时,您更改了图片属性并在面板上调用repaint()