问题标签 [try-with-resources]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何设置 NetBeans 项目属性以使用 Java 7?
我是 NetBeans 新手,之前一直在使用 Eclipse。我现在已经开始使用 NetBeans,因为我需要学习各种 Java EE 概念,并且我找到了更多与 NetBeans IDE 相关的教程。EE中的很多抽象概念还是让我很困惑,所以我发现手把手教程对我来说最适合我。
然而,我遇到了死胡同。我正在关注本教程,关于设置 Web 服务客户端。但是,其中一行包含一个 try-with-resource 语句,这是 java 7 中的新功能。图片如下:
开始本教程时,我使用的是 Netbeans 7.1.3 和 Glassfish 3.1.2。我知道它不支持 EE7,所以我下载了带有 Glassfish 4.1 的 NetBeans 8.0.1。后来我意识到 try-with-resources 是 SE 的一部分,我的升级在这件事上是多余的。
我认为我的项目设置有问题,所以我右键单击它并打开它的属性。在 Libraries 选项下,我发现 JDK 已正确设置为 Java 1.7(更新 51)。图片在这里:
我还检查了其他选项,在运行下我发现 Java EE 设置为 6,即使选择 Glassfish 4.1 作为服务器。我认为这是 EE7 的实现,但该选项被锁定为 EE6。这让我有点困惑,但不应该是问题的原因。我仍然附上它的图片,以防万一它是相关的:
那么这个项目的 Java 设置有什么问题呢?为什么它不能接受 Java 7 功能,而它似乎设置为使用 Java 7?还有其他我需要设置java版本/主页的地方吗?
java - 为什么java.lang.AutoCloseable的close方法抛出异常,而java.io.Closeable的close方法抛出IOException?
我正在阅读此链接,try-with-resources
它说:
接口的 close 方法
Closeable
抛出 type 的异常,IOException
而接口的 close 方法AutoCloseable
抛出 type 的异常Exception
。
但为什么?AutoCloseable
也可以抛出的关闭方法IOException
是否有任何支持AutoCloseable
必须抛出类型异常的关闭方法的示例Exception
java - 如何在取消的 CompletableFuture 中释放资源
用例
假设我们使用 CompletableFuture.runAsync(..) 运行执行,并且在 runnable 中我们有 try-with-resources 块(我们正在使用一些资源,无论发生什么都应该关闭),并且在某个时候在 try 块中执行未完成时,我们取消可完成的未来......尽管执行停止了应该关闭的资源没有关闭AutoClosable的close()没有被调用......
问题
这是一个java问题还是有办法正确地做到这一点?没有像使用期货(支持中断等)这样的变通办法,如果它的预期行为在不可中断的 CompletableFuture 被取消时应该如何处理类似情况......?
编码
这将产生
正如您所看到的,它不会调用 cancel() 并让资源处于打开状态......
java - java.nio.file.FileSystemException: /proc: 打开的文件太多
我正在使用此代码读取 proc 文件系统中的所有文件夹
一段时间后,我收到此错误
看起来这个循环正在打开文件而不关闭它们。每次循环运行后有什么方法可以关闭文件吗?
java - Try-with-resources 流意外关闭
我有以下一组代码来将业务对象写入文件。写入通常分两部分完成,但writeTrx
这里的 -helper 执行临时文件写入和重命名:
但是,我确实不时java.nio.channels.ClosedChannelException
从中得到:
这让我很困惑。如何使用这样的调用结构关闭通道,例如 ObjectOutputStream仅在调用 close 时才关闭流?
我的理解是,当内部 writeTrx 调用返回时,流应该最早关闭,而不是在其中。
java - 为什么要在没有 Catch 或 finally 的情况下编写 Try-With-Resources?
为什么要写 Try without a Catch 或 finally ,如下例所示?
java - Try With Resources vs Try-Catch
我一直在查看代码,并且已经看到尝试使用资源。我以前使用过标准的 try-catch 语句,看起来他们做同样的事情。所以我的问题是Try With Resources vs Try-Catch 它们之间有什么区别,哪个更好。
这是资源的尝试:
junit - Byteman JUnit Runner - 无法在自动关闭的 InputStream#close 上触发 IOException
我有以下代码:
当我提供的(有效)输入流应该被关闭时,我正在尝试使用 Byteman Junit Runner 来触发 IOException:
我的测试失败:errors 总是空的,这意味着 Byteman 规则显然没有被执行(它被代理很好地加载,所以我不明白发生了什么)。
如何在通过 try-with-resources 调用的 close 方法上触发 IOException?
java - 在对象构造期间从与主体分开的 try-with-resources 中捕获错误
概括
我有一个可关闭的类型,CloseableClass
它可以在其构造函数、方法甚至可能在内部抛出 IOError close
。我想使用 try-with-resources 并且仍然以与使用期间的错误不同的方式处理构建期间的错误(使用包括清理)。更好的是,我想编写可维护的代码。
假设您希望构造一个可关闭的类实例并将其与 try-with-resources 语句一起使用。它可以抛出IOException
它的构造函数和 try-with-resources 主体中使用的方法:
假设您要分别处理构造函数和正文中抛出的错误。有支持的方法吗?在 Python 中,我会这样做:
但在 Java 中,你不能不为对象分配第二个名称:
有人告诉我,这是“不可维护的代码”,主要是因为使用了closeable_
,我离同意也不远了。我希望避免使用 try-finally ,因为那样你会遇到更糟糕的模拟它的问题:
请注意,这需要第二次调用才能close
成为无操作,测试类不遵守(请注意,AutoCloseable
不需要这样做,尽管Closeable
确实如此)。close
当不能扔时,这有点好,但不多。
基本上问题是
close
可以扔- 处理前关闭
IOException
以防止打印"Body error!"
两次 - 如何使它与来自 try-with-resources 的多个初始化程序一起工作并不明显
- 无论如何,您最终都会复制代码。
我只是被迫忍受“不可维护的代码”还是我忽略了处理这个问题的好方法?