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?java таймер на текущий экземпляр
Есть ли простой способ сделать это, или я иду об этом неправильно? (Примечание: это консольный проект только не GUI)
==========
код отредактировал
Я изменил код на выше в соответствии с рекомендациями, и он работает почти так, как я ожидаю, однако нить, похоже, не заканчивается должным образом. Я был в то время, когда цикл умирал, и контроль в конечном итоге возвращался к основному методу. Есть идеи?
Ах, не понимал, что внутренние классы наследуют ссылку. Я немного смущен проблемой, которую Мидхат имеет в виду, хотя, не могли бы вы уточнить? – hspim
@hspim: Ну, таймер вызывается в одном потоке исполнения, re все еще в цикле 'while (true)' в основном потоке. Вы можете сделать 'endGame()' хранить флаг, говорящий «Я сделан», и изменить цикл while, чтобы остановить, когда это было изменено ... хотя вы, все равно придется ждать, пока игрок закончит свое текущее предположение. –
попытался использовать логическое значение для достижения этого, но он, похоже, не закончил цикл while. отредактировал приведенный выше код в его текущем формате. любой совет? – hspim