0
私は、タイマーがゼロになるまでにある時点に達していないと終了するゲームを作成しています。現在は動作しており、一度に複数のTimerTaskを作成できますが、キャンセルはできません。現在のところ、ボタンをクリックすると(ディスプレイ上の)タイマーはリセットされますが、バックグラウンドで実行され、ゼロになった時点でプログラムが終了します(実行してはいけないにもかかわらず)。各タイマーを開始するActionListenerのコードは次のとおりです。Javaで特定のTimerTaskをキャンセルできますか?
public class Game implements Runnable {
private int currentScore, difficulty, level, highscore, x, y;
private boolean playMusic, playClicks, gameRunning;
private boolean stopLastTimer = false;
JFrame gameFrame;
Data data;
JButton target;
Thread t;
JLabel score;
Timer globalTimer = new Timer();
JLabel timer;
ActionListener clickedAction = new ActionListener(){
public void actionPerformed(ActionEvent ae) {
stopLastTimer = true;
t.interrupt();
currentScore++;
score.setText("Score: " + currentScore);
//playClickSound();
globalTimer.schedule(new TimerTask(){
double second = 2.0;
@Override
public void run() {
second = second - 0.1;
if(stopLastTimer) {
this.cancel(); stopLastTimer = false; } //should end old timer here
if(second == 0.0) {
this.cancel();
gameStop();
}
second = limitPrecision(Double.toString(second), 1);
timer.setText(second + "s");
}
},0, 100);
}
};
どうすればよいですか?私はAPIを読んでコードを試しましたが、この状況で使用するタイプのようには見えません。私はカウントダウンを表示することさえできません。 –
概念はAWT Timerと同じですが、Event Dispatch ThreadでSwingコンポーネントが適切に更新されるようにSwingで使用されます。タイマーが発生するすべてのタイマーは、1つずつ減少します。秒が0に達するとタイマーが停止します。ロジックは、run()メソッドの代わりにActionListenerのactionPerformed()メソッドのコードを除いて現在のものと同じです。ここに簡単な例があります。http://stackoverflow.com/questions/30417719/update-a-label-with-a-swing-timer/30417857#30417857 – camickr