Domanda

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

    }
}

Ho la classe sopra, che devono eseguire un ciclo per un dato periodo di tempo e successivamente richiamare un metodo di istanza. Essenzialmente Ho bisogno del loop in newGame () per eseguire per un minuto prima Endgame () viene richiamato sulla corrente. Tuttavia, utilizzando la classe Timer Non sono sicuro di come avrei invocare il metodo che ho bisogno nell'istanza corrente visto che non posso passare parametri per le timertasks correre metodo?

C'è un modo semplice per fare questo o sono io che vado su questo il modo sbagliato? (Nota: questo è solo un progetto di console, senza interfaccia grafica)

==========

codice modificato

Ho cambiato il codice per i sopra seguendo le raccomandazioni, e funziona quasi come mi aspetto però il filo ancora doesnt sembra finire in modo corretto. Io ero il ciclo while sarebbe morto e il controllo alla fine sarebbe tornato al metodo principale. Tutte le idee?

È stato utile?

Soluzione

A causa timesUP (si prega di cambiare il nome!) È una classe interna, che ha già un riferimento all'istanza di Boggle che lo ha generato. (Che non sarebbe il caso se fosse contrassegnato come static.) Se si voleva creare un'istanza di timesUP associato a un altro esempio, si sarebbe fare qualcosa di simile:

otherBoggle.new timesUp();

E 'la sintassi piuttosto strano, è vero:)

Questo non risolve il problema che Midhat identificato, è vero - ma significa che non è necessario preoccuparsi di ottenere un riferimento alla classe esterna. Basta chiamare endGame() dall'interno timesUP.run() e si chiamano per l'istanza appropriata.

Altri suggerimenti

Hai il blocco di ingresso della console nel thread. Il tempo di esecuzione sarà dettata da questo. Si può avere la console di input in un thread separato, e aggiungere un timer nel thread corrente di uccidere il thread di input dopo un minuto, e chiamare this.endGame ()

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top