Почему моя кнопка не активна? (Джава)

У меня есть программа 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();
Другие вопросы по тегам