while循环在JAVA中的鼠标监听器内

时间:2014-06-06 09:29:16

标签: java mouselistener

我试图在鼠标点击时启动一个小动画......这是我的代码

import acm.graphics.*;
import acm.program.*;
import java.awt.*;
import acm.util.*;
import java.awt.event.*;

public class ClickAnimation extends GraphicsProgram {

    GOval ball=new GOval(50,50,50,50);

    public void run() {
        add(ball);
        addMouseListeners();
    }

    public void mouseClicked(MouseEvent e) {
        while(ball.getX()<getWidth()) {
            ball.move(0.2,0.2);
            pause(10);
        }
    }
}

Google表示while循环不能在鼠标监听器中使用...我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我想我遇到了你的问题。我找出了 JAVA 中鼠标侦听器内部循环不起作用的原因是线程问题。这在 this link 中有解释。所以我通过为 while 循环创建另一个威胁解决了这个问题,它解决了我的问题。希望下面的代码可以解决您的问题。

import acm.graphics.*;
import acm.program.*;
import java.awt.*;
import acm.util.*;
import java.awt.event.*;

public class ClickAnimation extends GraphicsProgram {

    GOval ball=new GOval(50,50,50,50);

    public void run() {
        add(ball);
        addMouseListeners();
    }
    
    public void mouseClicked(MouseEvent e) {
        Thread x = new Thread(new InnerBallClass());
        x.start();
    }

    public class InnerBallClass implements Runnable{
        public void run(){
            while(ball.getX()<getWidth()) {
                ball.move(0.2,0.2);
                pause(10);
            } 
        }
    }

}