0
我想創建一個菜單窗口,它將成爲gui類的一部分。 gui級別由經理級別控制。問題是,當我按下菜單中的按鈕時,我希望Manager類能夠知道按下了一個按鈕。我嘗試使用標誌來指示按鈕是否被按下,但由於某種原因它不起作用。這裏是我的代碼: 的GUI類:從另一個類控制JFame
public class Gui extends JFrame implements ActionListener {
private JFrame jframe;
private JPanel jpanel;
private JButton jbutton;
public boolean jbuttonFlag = false;
Gui(){
jframe = new JFrame("Test Frame");
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jpanel = new JPanel();
jpanel.setBackground(Color.BLUE);
jbutton = new JButton("Click Me");
jbutton.addActionListener(this);
jpanel.add(jbutton);
jframe.add(jpanel);
jframe.pack();
jframe.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Click Me"))
jbuttonFlag = true;
}
}
和管理類:
public class Manager{
Gui g;
Manager(){
g = new Gui();
}
public void Start(){
while(!g.jbuttonFlag);
System.out.println("Button Pressed");
}
}
當我點擊我要它,因爲它被點擊控制檯寫的按鈕,但它不」不會發生。爲什麼?謝謝!
好的,謝謝!雖然條件也是一種同步,但是不能使用它,因爲一方面可以防止經理線程向前移動? – Keselme
另一件事,如果我有不同的按鈕,我想爲每個按鈕有不同的響應,我需要爲每個按鈕使用同步? – Keselme
您可以同步標誌或其他對象以確定按下哪個按鈕。只要確保其中一個線程寫入其他線程時不應該嘗試讀取它。雖然不是一個好的解決方案,因爲它通過忙於等待而使CPU保持忙碌。這可能會阻止您的操作偵聽器和其他線程。 –