0

boolean check_pointメソッドで変数値にアクセスするrun()方法は?

public class Transciever {

public boolean check_point = true;

  public void run() {

                while (true) {

                         System.out.println("before client listening...");
                        socket = serverSocket.accept();
                        System.out.println("after socket accept");
                        check_point = false; 
   }
  }
}

boolean check_pointメソッドから変数の値を変更することはできませんが、run()他の通常のメソッドにアクセスすることはできます。

4

3 に答える 3

2

check_point の値を変更することは、 while ループのブレーク条件としてやりたいことだと思いますが、 while ループを終了することはありません (while(true)は無限ループです)。while (check_point)ループから抜け出すために入れてください!

于 2013-07-10T13:54:51.197 に答える
1

コードで public フィールドにアクセスできないように見える理由は、while ループ条件でそれを参照していないためです。に設定すると、ループが終了することを期待していると思います。ただし、ループ条件で参照することはありません。そのため、ステートメントの後で完全に false になったとしても、ループは永遠に続きます。check_pointcheck_pointfalsecheck_pointcheck_point

また、コードで「トランシーバー」のスペルを間違えました。

おそらく意図したのは次のとおりです。

public class Transceiver implements Thread {

    public boolean check_point = true;

    @Override
    public void run() {
        while (check_point) { //loop condition changed
            ServerSocket serverSocket = // [...]
            Socket socket = serverSocket.accept();
            check_point = false;
        }
    }
}

また、これが実際の最終的なコードである場合は、代わりに、ループをまったく使用せずに、このようにすることをお勧めします (check_point通信が完了したかどうかを確認するために他のクラスで使用されると思われるフィールドを保持できますか? :

public class Transceiver implements Thread {
    public boolean check_point = true;

    @Override
    public void run() {
        ServerSocket serverSocket = // [...]
        Socket socket = serverSocket.accept();
        check_point = false;
    }
}
于 2013-07-10T14:17:05.867 に答える