2013-07-29 3 views
2

У меня есть Java-метод, который выполняет очень длинную модель. Это занимает около 20 минут. Когда я нажимаю кнопку, кнопка остается нажатой, пока модель не будет закончена. Мне нужно создать кнопку, которая при нажатии останавливает выполнение модели До сих пор у меня есть две кнопки: Стоп и Пуск. Моя проблема в том, что когда я нажимаю кнопку запуска, все кнопки из графического интерфейса замораживаются, и они не могут быть нажаты до тех пор, пока модель не закончитКак отпустить нажатую кнопку java

Как создать кнопку остановки?

Спасибо,

Йонут

ответ

2

Лучше всего, чтобы начать тему, как только кнопка нажата. Вы можете сделать кнопку остановки, которая останавливает поток, если он еще не закончен. Для этого вам придется отслеживать поток, хотя (например, в статической переменной).

Краткое руководство по резьб: http://www.tutorialspoint.com/java/java_multithreading.htm

Пожалуйста, обратите внимание на это, а также: How to properly stop the Thread in Java?.

+0

Спасибо, я прочитаю про темы – user2631253

0

Если вы выполняете 20-минутную задачу в ответ на нажатие кнопки, вы, вероятно, должны делать это в фоновом потоке.

+0

Спасибо, я прочитал о потоках – user2631253

0

Вы должны использовать многопоточность. Основной пример:

public class ThreadTest { 

    private int getSum(int x, int y){ 
     return x + y; 
    } 

    public static void main(String args[]) { 

     ThreadTest tTest = new ThreadTest();   
     System.out.println(tTest.getSum(2, 5)); 
     // Start the thread 
     new LongProcess().start();   
     // Since the thread sleeps for two seconds 
     // You will see 5 + 5 = 10 before Done! gets printed out 
     System.out.println(tTest.getSum(5, 5)); 

    } 
} 

class LongProcess extends Thread { 

    public LongProcess(){ 
     System.out.println("Thread started.."); 
    } 

    public void run() { 
     try{     
      Thread.sleep(2000); 
      System.out.println("Done!");   
     } catch(InterruptedException iEx){ 
      System.out.println(iEx.toString());   
     } 
    } 
} 
3

Вы должны использовать SwingWorker. Это specifically designed для выполнения длительных задач вне EDT, при этом все еще можно обновить графический интерфейс с отчетами о ходе работы.

Смежные вопросы