Java 为什么我的按钮不可点击?(爪哇)
我有一个JavaSwingGUI程序,当我点击一个切换按钮时,计时器开始计时,但我希望能够点击同一个按钮,计时器停止,现在它不会让我再次点击它。 这是在我的计时器课上Java 为什么我的按钮不可点击?(爪哇),java,swing,event-dispatch-thread,thread-sleep,Java,Swing,Event Dispatch Thread,Thread Sleep,我有一个JavaSwingGUI程序,当我点击一个切换按钮时,计时器开始计时,但我希望能够点击同一个按钮,计时器停止,现在它不会让我再次点击它。 这是在我的计时器课上 public void runningClock(){ isPaused = false; while(!isPaused){ incrementTime(); System.out.println("Timer Current Time " + getTime());
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();
}
}
您正在使用
线程冻结Swing事件线程。sleep(…)
和while(something)
循环。解决方案:不要这样做——不要调用占用事件线程并阻止它执行必要任务的事件线程上的代码。而是更改程序的状态。对于你的时钟,使用一个。例如,请查看我的答案和代码。您正在使用线程冻结Swing事件线程。sleep(…)
和while(something)
循环。解决方案:不要这样做——不要调用占用事件线程并阻止它执行必要任务的事件线程上的代码。而是更改程序的状态。对于你的时钟,使用一个。例如,请查看我的答案和代码。您正在程序中执行此操作,请尝试{Thread.sleep(1000);}catch(Exception e){}
。由于此语句应用于主线程本身,因此应用程序本身挂起,或者可以说冻结。您可以为计时器应用一个单独的线程
new Thread(new Runnable(){
public void run(){
//Do Stuff
}
}).start();
您正在程序中执行此操作,
尝试{Thread.sleep(1000);}catch(异常e){}
。由于此语句应用于主线程本身,因此应用程序本身挂起,或者可以说冻结。您可以为计时器应用一个单独的线程
new Thread(new Runnable(){
public void run(){
//Do Stuff
}
}).start();
查看问题的原因和解决方法(如前所述)查看问题的原因和解决方法(如前所述)