我有一个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();
}
}
答案 0 :(得分:5)
您正在使用Thread.sleep(...)
和while (something)
循环冻结Swing事件线程。解决方案:不要这样做 - 不要在占用事件线程的事件线程上调用代码,并阻止它执行必要的任务。而是更改程序的 状态 。对于您的时钟,请使用Swing Timer。例如,请查看我的答案和代码here。
答案 1 :(得分:0)
您正在程序try{Thread.sleep(1000);} catch(Exception e){}
中执行此操作。由于此语句应用于主线程本身,因此应用程序本身挂起或者您可以说冻结。你可以做的是为计时器应用一个单独的线程。
new Thread(new Runnable(){
public void run(){
//Do Stuff
}
}).start();