シンプルな tictactoe ネットワーク ゲームを構築しようとしています。プレーヤーが移動するまで待ってから続行するプログラムが必要です。コードの最後にある whileConnected() 関数には、永久に実行され、ボタンが押されたときに確認メッセージを表示するはずの while(true) サイクルがあります (これは、文字列の内容によって通知されます)。変数「メッセージ」の変更)。
問題は、ボタンがクリックされたときに String メッセージ変数が変更されたとしても、whileConnected() 関数がこれを認識せず、関数内の if ステートメントが true に評価されないことです。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)");
}
}
}