2

SocketChannelサーバーとクライアントの間でメッセージを送信するために使用しています。クライアントがサーバーに接続すると、サーバーはtry-with-resources try でInputStreamsandを開き、次のようにクライアントからメッセージを受信し、クライアントにメッセージ送信します。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_ceckisのみを呼び出し、 istrueかどうかをテストしますglobal_outnull、そうではありません。ただし、sendMessage(Object)一向に戻りません。そうglobal_out でない 場合は、何かに設定されているに違いないのに、 が終了nullする前にリソースを使用できないのはなぜですか?try-with-resources

これを回避する方法はありますか?

4

0 に答える 0