Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
刷新框架的Java线程问题_Java_Multithreading - Fatal编程技术网

刷新框架的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,

我已经用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);
    }
}
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()返回的。如果仍然不清楚,请告诉我。