我正在尝试构建一个简单的tictactoe 网络游戏。我需要程序等到玩家移动然后继续。在我的代码底部的 whileConnected() 函数中,我有一个 while(true) 循环,它应该永远运行并在按下按钮时显示一条确认消息(这表明字符串的内容变量“消息”的变化)。
问题是,即使单击按钮时字符串消息变量发生变化,我的 whileConnected() 函数也永远不会意识到这一点,并且函数内的 if 语句永远不会计算为真。ButtonListener 类中的相同 if 语句可以正常工作并显示所需的确认消息。
我怎么解决这个问题?我读了又读,我知道我应该使用线程(我读过它们,但我以前从未使用过它们,这就是为什么它只是一个猜测)。我需要线程吗?有人可以简单地解释一下应该用于这个特定问题的原则吗?(如何让程序暂停直到单击按钮,然后继续使用单击按钮时创建的相关信息)。一个代码示例真的会减轻我对线程的阅读——对于初学者来说,这是一个非常抽象的话题。
以下是我的代码,在此先感谢。
public class Test extends JFrame
{
private Container contentPane;
private JButton btn00;
private static String message = "";
private class ButtonListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
String buttonText = e.getActionCommand();
if (buttonText.equals("My Button"))
{
message = "pressed";
if (message != "")
System.out.println(message+"(executed by ButtonListener)");
}
}
}
public Test()
{
this.contentPane = this.getContentPane();
btn00 = new JButton("My Button");
btn00.setSize(btn00.getPreferredSize());
btn00.setLocation(20,20);
ButtonListener listener = new ButtonListener();
btn00.addActionListener(listener);
// configure frame
this.setSize(300,300);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
// make panel
JPanel panel = new JPanel();
panel.setSize(200,200);
panel.setLocation(10,10);
panel.add(btn00);
this.contentPane.add(panel);
}
public static void main(String[] args)
{
Test gui = new Test();
gui.setVisible(true);
// connected
whileConnected();
}
private static void whileConnected()
{
System.out.println("message is at first empty: "+message);
while (true)
{
// the if below never evaluates to true... why?
if (message != "") // this is never true
System.out.println(message+"(executed by whileConnected)");
}
}
}