刷新框架的Java线程问题
我已经用Java线程编写了弹跳球的代码。但当球向下移动时,我无法清除/刷新它刷新框架的Java线程问题,java,multithreading,Java,Multithreading,我已经用Java线程编写了弹跳球的代码。但当球向下移动时,我无法清除/刷新它 import java.awt.*; class myFrame extends Frame { public void paint(Graphics g) { try { for (int i = 10; i <= 400; i++) { g.drawOval(100,
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);
}
}
import java.awt.*;
类myFrame扩展了Frame{
公共空间涂料(图g){
试一试{
对于(int i=10;i您不应该调用update()
。如果您的目的是清除上一个球,则此操作有效:
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);
repaint();
Thread.sleep(500);
Rectangle r = getBounds();
g.clearRect(r.x, r.y, r.width, r.height);
}
}
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);
}
}
import java.awt.*;
类myFrame
延伸框架
{
公共空间涂料(图g)
{
尝试
{
对于(int i=10;iThanks Roberto。它解决了我的问题。但我不明白。哦!!!可能它是作为一个橡皮擦工作的…?不确定你不明白什么,但让我试着解释一下。在你的paint()中,你调用了update()。不确定原因是什么,但你可以看到:update()实现实际上调用了paint()。这意味着您将进入无限递归(paint()调用update(),后者调用paint(),后者调用update())。这就是您的代码最终引发异常的原因。删除更新后,代码会正常工作,但每次绘制圆时,它都会与以前的圆重叠。为了防止出现这种情况,您需要清除帧区域,而g.clearRect调用就是这样做的。clearRect的参数是x、y,其中和高度表示组件的边界,这是getBounds()返回的。如果仍然不清楚,请告诉我。