try-with-resource 不关闭套接字连接
Posted
技术标签:
【中文标题】try-with-resource 不关闭套接字连接【英文标题】:try-with-resource not closing socket connection 【发布时间】:2018-05-28 05:36:20 【问题描述】:我正在使用 Java 1.8,虽然 try-with-resource 在应用程序的其他部分工作正常,但在我这样编写的一个类中:
try(Socket sock = socket != null ? socket : new Socket()) //Other implementation
它说资源泄漏。有什么线索吗?
【问题讨论】:
这是来自 IDE 编译器的消息(eclipse?)它有时会报告误报 我从消息中了解到,如果套接字不为空且未分配的对象无法关闭,则有一个 Socket 无法初始化的选项。 我的eclipse Oxygen.3a (4.7.3a) 不抱怨。 将三元运算符移动到一个以socket
为参数并执行此逻辑的函数中。这将避免编译器被这里的三元运算符混淆。
另外,请将您的代码作为文本而不是图像放在您的问题中。
【参考方案1】:
我从消息中了解到,如果套接字不为空且未分配的对象无法关闭,则套接字无法初始化的选项。
【讨论】:
@MạnhQuyếtNguyễn 由于很多原因,这太不合适了。例如:是什么让您认为海报不是女性? 怎么可能不赋值? @LonelyNeuron 我的错。not assigned object cannot close.
-> 这是在布尔表达式之后计算的
@MạnhQuyếtNguyễn 不要再这样做了【参考方案2】:
您的代码原则上没有问题,因此可以忽略 Eclipse 给出的警告。
但是,如果你这样写,你的代码会更清晰:
if(null != socket)
try(Socket sock = new Socket())
catch(Exception e)
【讨论】:
以上是关于try-with-resource 不关闭套接字连接的主要内容,如果未能解决你的问题,请参考以下文章
如果我们使用 try-with-resource 是不是需要关闭资源
Socket.io 不会按需关闭套接字(并且不允许我的 swift 应用程序再次重新连接到 node.js 服务器)