Этот пост относится к моему последнему, касающемуся таймера.Я решил, что для получения немедленных результатов проще всего было написать поток Counter, который ведет обратный отсчет с определенного времени (в данном случае 5 секунд), и если счетчик достигает 0, JFrame закрывается и дает пользователю знать, что время истекло,
Однако у меня возникли проблемы.Кажется, я не могу закрыть JFrame, когда счетчик достигнет 0. Я не уверен, что мне не хватает чего-то глупого или я неправильно понимаю, как работают потоки и как работают JFrames.Вот код, дайте мне знать, что вы думаете.
Кстати, я понимаю, что, вероятно, будет наиболее эффективно использовать качели. Время, но я просто не совсем понимаю их природу.еще.У меня есть временные ограничения (я не студент или что-то в этом роде, мне просто нравится оставаться мотивированным), и поэтому я пока что просто «фальсифицирую» эту вещь.
В любом случае, нак коду!
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
public class RacerDoom extends JFrame {
boolean timesUp=false;
public RacerDoom() {
//create JFrame
super("Racer Doom Squared");
setSize(WIDTH,HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
if(timesUp==true) {
dispose();
JOptionPane.showConfirmDialog(null, "Time's Up! Click Okay to try again!");
}
Counter c1 = new Counter();
c1.start();
//Counter
private class Counter extends Thread {
public Counter() {}
public void run() {
for(int i=5;i>=0;i--) {
if(i==0) {
timesUp=true;
}
System.out.println(i);
try{
Thread.sleep(1000);
}
catch(InterruptedException e){}
}
}
}
...
РЕДАКТИРОВАТЬ: У меня есть таймер реализован и работает.Он делает именно то, что мне нужно, но я не могу заставить работать команду timer.stop();
.Я получаю сообщение об ошибке "Таймер локальной переменной не мог быть инициализирован.
Как я уже сказал, таймер работает, он просто никогда не перестает работать, пока программа не завершится. Вот код конструктора для JFrame, гдетаймер находится.
int counter = 0;
public RacerDoom() {
//create JFrame
super("Racer Doom Squared");
setSize(WIDTH,HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
final Timer timer=new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(counter>=10) {
timer.stop(); //the error occurs here
dispose();
JOptionPane.showConfirmDialog(null, "Time's Up!");
}
else{
counter++;
}
System.out.println(counter);
}
});
//inner thread
Move1 m1 = new Move1();
m1.start();
timer.start();
}