gpt4 book ai didi

当前实例上的 java 计时器

转载 作者:行者123 更新时间:2023-12-01 16:06:10 28 4
gpt4 key购买 nike

import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;


public class Boggle {
Board board;
Player player;
Timer timer;
boolean active;

static Scanner in = new Scanner(System.in);

public Boggle() {
board = new Board(4);
timer = new Timer();
}

public void newGame() {
System.out.println("Please enter your name: ");
String line = in.nextLine();
player = new Player(line);
active = true;

board.shuffle();
System.out.println(board);

timer.schedule(new timesUP(), 20000);
while(active) {
String temp = in.nextLine();
player.addGuess(temp);
}
}


public void endGame() {
active = false;
int score = Scoring.calculate(player, board);
System.out.println(score);
}


class timesUP extends TimerTask {
public void run() {
endGame();
}
}


public static void main(String[] args) {
Boggle boggle = new Boggle();
boggle.newGame();

}
}

我有上面的类,它应该在给定的时间长度内执行循环,然后调用实例方法。本质上,我需要 newGame() 中的循环在当前实例上调用 endGame() 之前运行一分钟左右。但是,使用 Timer 类,我不确定如何在当前实例上调用我需要的方法,因为我无法将任何参数传递给 timertasks run 方法?

有没有简单的方法可以做到这一点,或者我是否以错误的方式处理这个问题? (注意:这只是一个控制台项目,没有 GUI)

==========

代码已编辑

我已按照建议将代码更改为上述内容,它几乎按照我的预期工作,但线程似乎仍然没有正确结束。我认为 while 循环会死掉,控制权最终会回到 main 方法。有什么想法吗?

最佳答案

因为 timesUP (请更改名称!)是一个内部类,它已经拥有对创建它的 Boggle 实例的引用。 (如果将其标记为static,情况就不会如此。)如果您想创建与另一个实例关联的 timesUP 实例,您可以执行类似的操作:

otherBoggle.new timesUp();

诚然,这是相当奇怪的语法:)

诚然,这并不能解决 Midhat 指出的问题 - 但这意味着您无需担心获取对外部类的引用。只需从 timesUP.run() 中调用 endGame(),它就会在适当的实例上调用它。

关于当前实例上的 java 计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2536186/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com