有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

文件java。尼奥。频道。Java 8上的AsynchronousClose异常

我刚刚将我的代码从Java7Windows移动到Java1.8Linux,我在相同的代码基础上得到了这个堆栈跟踪

java.nio.channels.AsynchronousCloseException at sun.nio.ch.SimpleAsynchronousFileChannelImpl$3.run(SimpleAsynchronousFileChannelImpl.java:380) [rt.jar:1.8.0_92] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_92] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_92] at java.lang.Thread.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) 个答案

  1. # 1 楼答案

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

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

    注意:我仍然不知道它在windows中是如何工作的。代码仍然部署在Windows服务器上,在我写这篇文章之前,我重新测试了它,它可以与其中的finally块一起工作:)。无论如何,我不会再花时间在这上面了

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