2013-03-17 146 views
2

問題是:我有一個swing應用程序。只有一種形式有2 btns(「開始」,「停止」)。 在這些btns上,我添加了帶有線程類的ActionListener。多線程Java Swing

我想在新線程中啓動一些工作,當我點擊btn「開始」並結束該工作時,我點擊btn「停止」。代碼有點類似於這個在控制檯中可以正常工作,但在swing doest中。任何幫助讚賞。提前致謝。 )

class Action implements ActionListener{ 
     class MyThread extends Thread{ 
      boolean live = true; 

      @Override 
      public void run() {    
       while(live) 
        System.out.println("doing..."); 
      }    

       public void shutDown(){ 
       live = false; 
      } 
     } 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      JButton source = (JButton) e.getSource(); 
      MyThread t = new MyThread(); 
      switch (source.getText()) { 
      case "Start": 
        t.start(); 
        break; 
      case "Stop": 
        t.shutDown(); 
        break; 
    } 

而這簡單的形式

public class App extends JFrame { 
     public static void main(String[] args) { 
      App app = new App(); 
      app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      app.setVisible(true); 

      JButton btn1 = new JButton("Start"); 
      JButton btn2 = new JButton("Stop"); 

      app.getContentPane().add(btn1, BorderLayout.WEST); 
      app.getContentPane().add(btn2, BorderLayout.EAST); 

      Action action = new Action(); 

      btn1.addActionListener(action); 
      btn2.addActionListener(action); 
     } 

    } 
+1

現場最好被宣佈爲不穩定。 – 2013-03-17 18:32:56

回答

2

你正在創建一個新的Thread對象每一個按鈕被點擊的時間,讓你停止線程是不是你啓動的相同。您需要保留對啓動時創建的線索的引用,以便稍後再停止。

+0

oh my god)))是什麼錯誤...))))非常感謝你!)似乎我需要休息,因爲這個錯誤是非常荒謬的))) – yvoytovych 2013-03-17 18:26:40