Почему моя кнопка не активна? (Джава)
У меня есть программа java swing gui, и когда я нажимаю кнопку переключения, запускается таймер, но я хочу иметь возможность нажать ту же кнопку, и таймер останавливается, и сейчас он не позволяет мне нажимать на нее снова. Это в моем классе таймера
public void runningClock(){
isPaused = false;
while(!isPaused){
incrementTime();
System.out.println("Timer Current Time " + getTime());
time.setText(""+ getTime());
try{Thread.sleep(1000);} catch(Exception e){}
}
}
public void pausedClock(){
isPaused=true;
System.out.println("Timer Current Time " + getTime());
time.setText(""+ getTime());
try{Thread.sleep(1000);} catch(Exception e){}
}
и это в моем основном классе
private void btnRunActionPerformed(java.awt.event.ActionEvent evt) {
if(btnRun.getText().equals("Run")){
System.out.println("Run Button Clicked");
btnRun.setText("Pause");
test.runningClock();
}
else if(btnRun.getText().equals("Pause")){
System.out.println("Pause Button Clicked");
btnRun.setText("Run");
test.pausedClock();
}
}
2 ответа
Вы замораживаете ветку событий Swing своим Thread.sleep(...)
а также while (something)
петли. Решение: не делайте этого - не вызывайте код в потоке событий, который занимает поток событий и не позволяет ему выполнять необходимые задачи. Вместо этого измените состояние вашей программы. А для своих часов используйте Swing Timer. Например, посмотрите мой ответ и код здесь.
Вы делаете это в своей программе, try{Thread.sleep(1000);} catch(Exception e){}
, Как это утверждение применяется к самому основному потоку, так и само приложение зависает, или вы можете сказать, зависает. Что вы можете сделать, это применить отдельный поток для таймера.
new Thread(new Runnable(){
public void run(){
//Do Stuff
}
}).start();