2

ちょっと面倒な問題があります。現在、スレッドを開始し、そのスレッド内でタイマーを設定し、そのスレッドを終了してその存続を継続するコードのスニペットがあります。ここでの意図は、プログラムが TimerTask の完了を待ってからコード フローを続行することでした。ただし、明らかに、新しい TimerTask を設定しても、タイマーが切れるのを待つために実行が一時停止されることはありません。

コードが TimerTask に到達し、TimerTask の有効期限が切れるのを待ってから続行するように設定するにはどうすればよいですか? タイマーをまったく使用する必要がありますか? 私はどこでも解決策を探しましたが、見つけられないようです。

timer = new Timer();
    Thread t = new Thread(new Runnable(){
        boolean isRunning = true;
        public void run() {
            int delay = 1000;
            int period = 1000;
            interval = 10;
            timerPanel.setText(interval.toString());

            //Scheduling the below TimerTask doesn't wait
            //for the TimerTask to finish before continuing
            timer.scheduleAtFixedRate(new TimerTask() { 

                public void run() {
                    timerPanel.setText(setInterval().toString());
                }
            }, delay, period);

            System.out.println("Thread done.");
        }
    });
    t.start();

    try {
        t.join(); //doesn't work as I wanted
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    endTask();

前もって感謝します。

編集: 繰り返されるタスクについて混乱して申し訳ありません。10 から 0 まで毎秒パルスするカウントダウン タイマーであるため、タスクを繰り返す必要があります。関数 setInterval() は最終的にタイマーをキャンセルします。関連するコードは次のとおりです。

private final Integer setInterval() {
    if (interval == 1)
        timer.cancel();
    return --interval;
}
4

3 に答える 3