問題是這樣的,嘗試開發一個窗體,在窗體內有兩個按鈕,一個start,一個stop,當點擊start按鈕時在控制台持續打印一句話,當用戶點擊stop按鈕時控制台打印結束。我的源代碼是這樣的,不知道哪裡出錯了,按下start以後就按不動stop了,求大神解答!
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Thread22 extends Frame {
Boolean flag = true;
Button b1;
Button b2;
public static void main(String[] args) {
new Thread22().F();
}
public void F(){
b1 = new Button("start");
b2 = new Button("stop");
add(b1, BorderLayout.NORTH);
add(b2, BorderLayout.CENTER);
new B1().start();
new B2().start();
pack();
setVisible(true);
}
class B1 extends Thread{
public void run() {
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
while(flag){
System.out.println("start");
}
}
});
}
}
class B2 extends Thread{
public void run() {
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
flag = false;
}
});
}
}
}
確實是線程阻塞,,你開始了一個線程綁定了b1點擊事件 綁定完了線程結束了 ,當你點擊執行的時候就不是線程在執行了是當前線程在執行.並且flag=true 所以當前線程永遠都在打印start