我SocketChannel
用来在服务器和客户端之间发送消息。一旦客户端连接到服务器,服务器就会在 try-with-resources 尝试中打开InputStreams
andOutputStream
来接收来自客户端的消息并将消息发送到客户端,如下所示:
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
istrue
并测试 if global_out
is null
,它不是。然而,sendMessage(Object)
永远不会回来。如果global_out
不是 ,它一定是被设置的,那么为什么在终止null
之前不能使用资源呢?try-with-resources
有什么办法可以解决这个问题吗?