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

    }
}

上記のクラスがあり、指定された時間ループを実行し、その後インスタンスメソッドを呼び出す必要があります。基本的に、現在のインスタンスでendGame()が呼び出される前に、newGame()のループを1分ほど実行する必要があります。ただし、Timerクラスを使用すると、timertasks runメソッドにパラメーターを渡すことができないため、現在のインスタンスで必要なメソッドをどのように呼び出すかがわかりません。

これを行う簡単な方法はありますか、それとも私はこれを間違った方法で行っていますか?(注:これはコンソールプロジェクトのみであり、GUIはありません)

==========

編集されたコード

推奨事項に従ってコードを上記に変更しました。ほぼ期待どおりに機能しますが、スレッドはまだ正しく終了していないようです。私はwhileループが終了し、制御が最終的にメインメソッドに戻ることになりました。何か案は?

4

2 に答える 2

1

timesUP(名前を変更してください!) は内部クラスであるため、それを作成したインスタンスへの参照が既にありますBoggle。( としてマークされている場合はそうではありません。)別のインスタンスに関連付けられstaticた のインスタンスを作成する場合は、次のようにします。timesUP

otherBoggle.new timesUp();

確かに、それはかなり奇妙な構文です:)

確かに、これは Midhat が特定した問題を解決するものではありませんが、外部クラスへの参照を取得することについて心配する必要がないことを意味します。endGame()内部から呼び出すだけtimesUP.run()で、適切なインスタンスで呼び出されます。

于 2010-03-29T06:56:40.223 に答える
0

スレッドでコンソール入力をブロックしています。運行時間はそれによって決まります。別のスレッドでコンソール入力を行い、現在のスレッドにタイマーを追加して、1 分後に入力スレッドを強制終了し、 this.endGame() を呼び出すことができます。

于 2010-03-29T06:53:55.663 に答える