-2
我已经编写了使用Java线程弹跳球的代码。但是当球向下移动时,我无法清除它/刷新它。Java线程问题刷新帧
import java.awt.*;
class myFrame extends Frame {
public void paint(Graphics g) {
try {
for (int i = 10; i <= 400; i++) {
g.drawOval(100,i+100,50,50);
update(g);
repaint();
Thread.sleep(500);
}
} catch(Exception ex) {
System.out.println(ex);
}
}
}
class BallTest {
public static void main(String cp[]) {
myFrame mf = new myFrame();
mf.setSize(500,500);
mf.setVisible(true);
}
}
感谢罗伯托。它解决了我的问题。但我不明白。哦!!!可能它是作为一个橡皮擦......? – ShailendraRPhadke
不知道你不明白,但让我试着解释更多。在你的paint()中,你正在调用update()。不知道是什么原因,但你可以在这里看到:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/awt/Component.java#Component .update%28java.awt.Graphics%29 update()实现实际调用paint()。这意味着你正在进行无限递归(paint()调用update(),它调用paint(),它调用update()....)。这就是你的代码最终抛出异常的原因。 –
一旦你删除了更新,代码的作品种类,但每次绘制圆圈都与前面的圈子重叠。以防止您想要清除g.clearRect调用所执行的框架区域。 clearRect的参数是x,y,其中的高度代表组件的边界,这是getBounds()返回的值。 让我知道如果有什么东西还不清楚。 –