2013-11-09 167 views
1

我一直試圖讓這個線程等待,但它沒有等待或拋出異常或做任何事情......(我創建了一個新線程來運行線程,否則我的GUI會凍結,因爲呼籲美國東部時間wait方法)Java:線程不會等待

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Sandbox extends JFrame { 

boolean paused = false; 
Thread thread = new Thread() { 
    public void run() { 
     while(true) { 
      System.out.println("running..."); 
     } 
    } 
}; 

private JButton button; 
public Sandbox() throws Exception { 
    thread.start(); 
    setSize(300, 150); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(3); 
    add(button = new JButton("Pause")); 
    button.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     new Thread() { 
      public void run() { 
       synchronized(thread) { 
        try { 
         if(button.getText().equals("Pause")) { 
          thread.wait(); 
          button.setText("Resume"); 

         } else if(button.getText().equals("Resume")) { 
          thread.notify(); 
          button.setText("Pause"); 
         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }.start(); 
    }}); 
    setVisible(true); 
} 

public static void main(String[] args) throws Exception { 
    new Sandbox(); 
} 
} 
+0

你不應該在'Thread'對象上調用'wait'。使用'join'等待它完成。 'wait/notify'用於具有條件變量行爲。 – zch

+0

我不認爲這個線程將永遠不會死......雖然它在一個while循環中無限期地延續 –

+0

我認爲你不明白「wait」方法的作用。當你調用'thread.wait()'時,你希望發生什麼? – zch

回答

1

如果你是比較你需要使用equals()字符串,而不是==

if(button.getText().equals("Pause")) { 
    thread.wait(); 
    button.setText("Resume"); 

} else if(button.getText().equals("Resume")) { 
    thread.notify(); 
    button.setText("Pause"); 
} 

但使用等待和通知可能不會真的做你想做的。

+0

是的,我明白,這只是粗略的代碼,以解決問題一直處理了相當長的一段時間。那麼我還能用什麼? –