Zamanlayıcı sıfıra ulaştığında belirli bir noktaya ulaşmadıysanız sona eren bir oyun oluşturuyorum. Şu anda çalışıyor ve bir kerede birden çok TimerTask oluşturabilirim, ancak bunları iptal edemiyorum. Şu anda, düğmesine tıklamak zamanlayıcıyı (ekran üzerinde) sıfırlar ancak yine de arka planda çalışır ve programı sıfıra ulaştığında sonlandırır (çalışmamasına rağmen). İşte her zamanlayıcıyı başlatan ActionListener için kod.Java'da belirli bir TimerTask'ı iptal edebilir misiniz?
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);
}
};
Bunu nasıl yaparım? API'yi okudum ve kodu denedim ama bu durum için kullanacağım şeyin türü gibi görünmüyor. Geri sayımı gösteremiyorum bile. –
Bu kavram bir AWT Zamanlayıcısı ile aynıdır, ancak Swing ile birlikte Swing bileşenlerinin Olay Sevk İpliği'nde doğru şekilde güncellenmesi için kullanılır. Zamanlayıcının ateşlediği her zamanlayıcı, saniyeyi bir azalır. Saniye 0'a ulaştığında, Zamanlayıcıyı durdurursunuz. Mantık, farklı bir durumda o anda geçerli olanı, bir run() yöntemi yerine bir ActionListener öğesinin actionPerformed() yöntemindeki kod haricinde yoktur. İşte başlamanız için basit bir örnek: http://stackoverflow.com/questions/30417719/update-a-label-with-a-swing-timer/30417857#30417857 – camickr