SocketChannel
サーバーとクライアントの間でメッセージを送信するために使用しています。クライアントがサーバーに接続すると、サーバーはtry-with-resources try でInputStreams
andを開き、次のようにクライアントからメッセージを受信し、クライアントにメッセージを送信します。OutputStream
try (ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(socket.getInputStream())) {}
out
トライ外にアクセスしたい。try には、メッセージが に到着したかどうかを繰り返しチェックする while ループが含まれておりin
、正常に動作します。
次のようにして、グローバル変数を設定しようとしましたglobal_out
。
ObjectOutputStream global_out;
...
try (ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(socket.getInputStream())) {
setOut(out);
while(should_check) {
Object message = in.readObject();
//do something
}
}
そして、次のように、この OutputStream に書き込もうとしました。
public void sendMessage(Object message) {
global_out.writeObject(message);
}
sendMessage(Object)
私はwhen should_ceck
isのみを呼び出し、 istrue
かどうかをテストしますglobal_out
がnull
、そうではありません。ただし、sendMessage(Object)
一向に戻りません。そうglobal_out
でない 場合は、何かに設定されているに違いないのに、 が終了null
する前にリソースを使用できないのはなぜですか?try-with-resources
これを回避する方法はありますか?