Pregunta

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();

    }
}

Tengo la clase anterior que debería realizar un bucle para una longitud dada de tiempo y después invocar un método de instancia. Esencialmente necesito el bucle en newGame () para una duración de un minuto o así antes de final de juego () se invoca en la instancia actual. Sin embargo, el uso de la clase Timer No estoy seguro de cómo iba a invocar el método que necesito en la instancia actual ya que no puedo pasar los parámetros a los timertasks método run?

¿Hay una manera fácil de hacer esto o voy de este por el camino equivocado? (Nota: esto es sólo un proyecto de consola, sin interfaz gráfica de usuario)

==========

código editado

He cambiado el código de lo anterior siguiendo las recomendaciones, y funciona casi como espero, sin embargo el hilo todavía parecen duerma para terminar correctamente. Yo era el bucle while moriría y control finalmente volver al método principal. Algunas ideas?

¿Fue útil?

Solución

Debido timesUP (por favor, cambie el nombre!) Es una clase interna, que ya tiene una referencia a la instancia de Boggle que lo creó. (Eso no sería el caso si se marca como static.) Si desea crear una instancia de timesUP asociado con otro ejemplo, que haría algo como:

otherBoggle.new timesUp();

Es la sintaxis bastante extraño, es cierto:)

Esto no soluciona el problema que Midhat identificado, es cierto - pero significa que usted no tiene que preocuparse de ser una referencia a la clase externa. Sólo tiene que llamar desde el interior de endGame() timesUP.run() y se llamará en la instancia adecuada.

Otros consejos

Ha bloqueo de entrada de consola en el hilo. El tiempo de ejecución será dictada por eso. Usted puede tener la entrada de la consola en un hilo independiente, y añadir un temporizador en el hilo actual para matar el hilo de entrada durante un minuto, y llamar a this.endGame ()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top