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 中手动关闭

如果我们使用 try-with-resource 是不是需要关闭资源

Socket.io 不会按需关闭套接字(并且不允许我的 swift 应用程序再次重新连接到 node.js 服务器)

你是否还在写try-catch-finally?来使用try-with-resources优雅地关闭

使用try-with-resource优雅关闭资源

Java try-with-resources 卡住了