当前位置: 首页 > 知识库问答 >
问题:

JAVA尼奥。频道。Java 8上的AsynchronousClose异常

微生毅
2023-03-14

我刚刚将代码从java 7 windows移动到java 1.8 Linux,我在相同的代码基础上得到了这个堆栈跟踪

JAVA尼奥。频道。sun上的AsynchronousCloseException。尼奥。ch.SimpleAsynchronousFileChannelImpl 3美元。在java上运行(SimpleAsynchronousFileChannelImpl.java:380)[rt.jar:1.8.0_92]。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1142)[rt.jar:1.8.0_92]。util。同时发生的ThreadPoolExecutor$Worker。在java上运行(ThreadPoolExecutor.java:617)[rt.jar:1.8.0_92]。朗。丝线。run(Thread.java:745)[rt.jar:1.8.0_92]

我的代码如下

  Charset cs = Charset.forName("UTF-8");
        byte[] inputBytes = jsonString.getBytes(cs);
        fileChannel.write(ByteBuffer.wrap(inputBytes), 0, ByteBuffer.wrap(inputBytes),new CompletionHandler<Integer, ByteBuffer>() {

            @Override
            public void completed(Integer result, ByteBuffer attachment) {
                log.info("Async Saving site content completed for sitename");
            }

            @Override
            public void failed(Throwable exc, ByteBuffer attachment) {
                exc.printStackTrace();
                log.error("Async File Write Failed",exc);
                log.fatal(exc);
            }
        });

想知道发生了什么。感谢您的帮助。

共有1个答案

呼延承平
2023-03-14

根据注释,我再次查看了一下,上面的代码包含在一个带有finally语句的try-catch中,该语句具有FileStream“close”方法调用。罪魁祸首是finally语句在另一个线程写入通道时关闭了通道。

我删除了finally块,将close file流代码移到completion handler中,现在就可以了。

注意:它在Windows中是如何工作的我仍然不知道。代码仍然部署在Windows服务器中,就在我写这个之前,我重新测试了它,它与那里的最后一个块一起工作:)。无论如何,不会再花时间在这上面了。

问题解决了。谢谢你的指点。

 类似资料:
  • 我在这个项目中使用Android Studio 2.3.1和jdk 1.8。 我导入了一个项目,它使用的是“java”。尼奥。文件文件和java。尼奥。文件“路径”。 Java8中不存在包“java.nio.file”。 此外,Android Studio不允许选择jdk 1.7。 我可以用这个代码做什么? 这个密码呢 **(无法解析文件和路径) 谢谢

  • 这是一个简单的应用程序: 从主页按ADD时,将显示New Ionic页面。 用户键入标题和内容后,按Add,列表中将添加一条注释,然后应用程序导航回主页。我所做的是:-创建添加注释页。-在添加注释中。ts,我返回主页,如下所示: } 在添加注释中。html我定义了如下按钮: 我尝试this.navCtrl.popToRoot()但它不工作。 有人知道原因吗?

  • 谷歌宣布,自2019年8月1日起,所有新应用程序和应用程序更新都必须提供64位版本和32位版本。我有一个Ionic 3(Cordova)应用程序,我不确定这会有什么影响。具体来说,爱奥尼亚/科尔多瓦应用程序需要做什么才能满足这一要求? 从2019年8月1日开始: 发布到Google Play时,除了32位版本外,所有包含本机代码的新应用和应用更新都必须提供64位版本。

  • 我正试图让jBehave在我的两个模块的谷歌应用引擎项目中模仿https://github.com/ctesniere/appengine-modules-sample-java.我使用Maven生成了jBehave原型()。我成功地运行了它。 然而,当我手动将更改应用到我的目标项目的pom.xml,并复制由jBehave原型生成的两个java文件时,我无法获得成功的。 我得到以下错误: 我找不到

  • 我想在Ionic4(角度7)中添加一个后退按钮。但我找不到合适的角度路由器方法。 <代码>从“@角度/路由器”导入{路由器} 在组件处理程序中单击按钮时如何返回?我想使用“@角度/路由器”而不是“@角度/公共”来实现它=

  • 我正试图使用这个工具将谷歌分析添加到一个Ionic/phonegap/Covdova应用程序中。然而,我发现了以下错误: 配置根项目“android”时出现问题。无法解析配置“:_debugCompile”的所有依赖项。找不到任何与com匹配的版本。谷歌。Android游戏服务s-analytics:。在以下位置搜索:https://repo1.maven.org/maven2/com/googl