2015-11-06 1 views
0

это проблема. Не пытайтесь нажать кнопку во время обратного отсчета. Мне нужно подождать, пока обратный отсчет не остановится. Мой вопрос заключается в том, как сделать обратный отсчет в фоновом режиме. подскажите.пожалуйста, помогите мне!Как сделать обратный отсчет работает в фоновом режиме с помощью eclipse

public static void main(String args[]){ 
     scrbutton myWindow = new scrbutton(); //set window design 
     myWindow.setSize(300,70); 
     myWindow.setVisible(true); 
     myWindow.setResizable(false); 

    } 

    public scrbutton() { 

     super("Clicker");  //Title 
     setLayout(new FlowLayout()); 
     addWindowListener(this); 
     add(kotak); 
     add(kotak2);       //add and design you components 
     add(kotak3); 
     add(enter); 
     enter.addActionListener(this); 
     kotak.setText("0"); 
     kotak2.setText("Times remaining: 60"); 
     kotak.setEditable(false); 
     kotak2.setEditable(false); 
     kotak3.setEditable(false); 

    } 


    public void actionPerformed(ActionEvent e) //What will run through the program? 
    { 



    click++; 
    kotak.setText("\r"+click);        //display number of click 
    if (click >=10){ 
     kotak3.setText("You Win!"); 
     enter.setEnabled(false); 
    }else{ 
     kotak3.setText("try again"); 
     } 

    for(int x=60; x>=0; x--) 

     {System.out.print(x+"\r");    // use print than println if you use (/r). 
     try {Thread.sleep(100);}    // 1000ms=1second thus its sleep(delay) 1 second between each iteration. 
     catch (InterruptedException e1){}  

     } 
    } 


public void windowClosing(WindowEvent e) { 
    dispose(); 
    System.exit(0); 
} 

public void windowOpened(WindowEvent e) {} 
public void windowActivated(WindowEvent e) {} 
public void windowIconified(WindowEvent e) {} 
public void windowDeiconified(WindowEvent e) {} 
public void windowDeactivated(WindowEvent e) {} 
public void windowClosed(WindowEvent e) {} 

}

ответ

1

Я собираюсь выйти на конечности здесь, как я не делаю Java, но я бы сказал, что вам нужно иметь приложение будет многопоточной - вам нужно ваш основной поток не должен блокироваться исполняющим потоком таймера. Создайте новый поток с обратным вызовом, чтобы увеличить таймер, отключите поток, а затем прекратите поток, когда он больше не нужен.

+0

Я использую Thread и работает отлично! спасибо, брату. – hizers

0

Сначала вы должны удалить это для цикла() с помощью sleep() из обработчика события. Хотя этот код выполняет ваш пользовательский интерфейс, он не реагирует.

Попробуйте использовать javax.swing.Timer для установки таймера, который срабатывает каждые 1 секунду. Затем в обработчике событий таймер делает все, что составляет «подсчет».

int delay = 1000; //milliseconds 
    ActionListener taskPerformer = new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      // do whatever constitutes counting down here 
     } 
    }; 
    new Timer(delay, taskPerformer).start(); 
+0

Я использую Thread и отлично работает! Спасибо, брат – hizers