Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的按钮不可点击?(爪哇)_Java_Swing_Event Dispatch Thread_Thread Sleep - Fatal编程技术网

Java 为什么我的按钮不可点击?(爪哇)

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());

我有一个JavaSwingGUI程序,当我点击一个切换按钮时,计时器开始计时,但我希望能够点击同一个按钮,计时器停止,现在它不会让我再次点击它。 这是在我的计时器课上

 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();
查看问题的原因和解决方法(如前所述)查看问题的原因和解决方法(如前所述)