【问题标题】:while loop inside a mouse listener in JAVAJAVA中鼠标侦听器内的while循环
【发布时间】:2021-02-10 00:58:53
【问题描述】:

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

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 循环...我该如何解决这个问题?

【问题讨论】:

  • 请分享最少的可测试代码并进一步解释问题。
  • 用while调用下一个方法。
  • 如果动画(while 循环)直接放在 run 方法中,它工作得很好,但是当通过鼠标侦听器调用时,程序就会卡住。所以我想让 mouseclicked() 中的 while 循环工作..
  • 我不熟悉您的库,但基本问题是处理程序需要立即返回,而不是永远等待。相反,从您的处理程序方法中触发后台作业(使用标准库中的 SwingWorker 之类的东西)。
  • 我的问题与stackoverflow.com/questions/20814260/… 类似,我只想知道是否可以在鼠标侦听器中构建循环。如果不能实现此目标

标签: java mouselistener


【解决方案1】:

我以为我遇到了您的问题。我弄清楚了 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);
            } 
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多