如何停止javax.swing.Timer

时间:2023-01-26 20:24:10
public void shiftRing(Tower a, Tower b) {
            done = false;
            temp = a.rings.pop();
            currentX = temp.x;
            from = a;
            to = b;
            to.rings.push(temp);
            timer = new Timer(1, new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    if (done) {timer.stop();}
                    
                    int incre = 1;
                    if (to.baseX - from.baseX < 0 ) incre *= -1;
                    
                    if (temp.y <= 20) up = true;
                    if (temp.x == to.baseX + currentX - from.baseX) move = true;
                    if (temp.y == to.baseY - temp.height) down = true;

                    if (!up) temp.setLocation(temp.x, temp.y - 1);
                    else if(!move) temp.setLocation(temp.x + incre , 20);
                    else if(!down) temp.setLocation(temp.x, temp.y + 1);
                    else {
                        up = false;
                        move = false;
                        down = false;
                        done = true;
                    }
                    System.out.println(temp.getLocation());
                    repaint();
                }
            });
            timer.start();
        }

如题,我用了 if (done) {timer.stop();}
但是还是停止不了这个timer,我想在done为真之后就退出timer和shiftRing这个方法,求助各位~~

12 个解决方案

#1


你的监听是不是没触发

#2


你的done为true了吗?

#3


timer = new Timer(1, new ActionListener() {

  public void actionPerformed(ActionEvent e) {
  if (done) {timer.stop();}

这里能编译成功吗 调用stop时的timer还未初始化完成呢

#4


引用 3 楼 dracularking 的回复:
timer = new Timer(1, new ActionListener() {

  public void actionPerformed(ActionEvent e) {
  if (done) {timer.stop();}

这里能编译成功吗 调用stop时的timer还未初始化完成呢

可以编译成功,但是停止不了。

#5


引用 2 楼 b87936260 的回复:
你的done为true了吗?

是的。

#6


是不是有个cancel方法?

#7


if (done) {
System.out.println("Stop()"); // 随便打印点东西看一下是否真的退出
timer.stop();
}

#8


确定timer.stop();执行了没有,

#9


引用 4 楼 geshenghua 的回复:
引用 3 楼 dracularking 的回复:
timer = new Timer(1, new ActionListener() {

public void actionPerformed(ActionEvent e) {
if (done) {timer.stop();}

这里能编译成功吗 调用stop时的timer还未初始化完成呢

可以编译成功,但是停止不了。

是吗 你是用什么编译的 奇怪啊
这里timer.stop()是位于Timer的构造体中,应会提示:timer may not have been initialized 我实际试验下来也是如此,完整的程序看一下就知道了

#10


但不管怎样,我想某些特殊情况无法查出编译问题,就会在运行期暴露,结果的一致性恰一定程度上证明了可能某个特定原因

#11


定时器都不清楚 好好看看jdk timer 

#12


timer.stop()很好用。

#1


你的监听是不是没触发

#2


你的done为true了吗?

#3


timer = new Timer(1, new ActionListener() {

  public void actionPerformed(ActionEvent e) {
  if (done) {timer.stop();}

这里能编译成功吗 调用stop时的timer还未初始化完成呢

#4


引用 3 楼 dracularking 的回复:
timer = new Timer(1, new ActionListener() {

  public void actionPerformed(ActionEvent e) {
  if (done) {timer.stop();}

这里能编译成功吗 调用stop时的timer还未初始化完成呢

可以编译成功,但是停止不了。

#5


引用 2 楼 b87936260 的回复:
你的done为true了吗?

是的。

#6


是不是有个cancel方法?

#7


if (done) {
System.out.println("Stop()"); // 随便打印点东西看一下是否真的退出
timer.stop();
}

#8


确定timer.stop();执行了没有,

#9


引用 4 楼 geshenghua 的回复:
引用 3 楼 dracularking 的回复:
timer = new Timer(1, new ActionListener() {

public void actionPerformed(ActionEvent e) {
if (done) {timer.stop();}

这里能编译成功吗 调用stop时的timer还未初始化完成呢

可以编译成功,但是停止不了。

是吗 你是用什么编译的 奇怪啊
这里timer.stop()是位于Timer的构造体中,应会提示:timer may not have been initialized 我实际试验下来也是如此,完整的程序看一下就知道了

#10


但不管怎样,我想某些特殊情况无法查出编译问题,就会在运行期暴露,结果的一致性恰一定程度上证明了可能某个特定原因

#11


定时器都不清楚 好好看看jdk timer 

#12


timer.stop()很好用。