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();
}
}
你不應該在'Thread'對象上調用'wait'。使用'join'等待它完成。 'wait/notify'用於具有條件變量行爲。 – zch
我不認爲這個線程將永遠不會死......雖然它在一個while循環中無限期地延續 –
我認爲你不明白「wait」方法的作用。當你調用'thread.wait()'時,你希望發生什麼? – zch