使用Eclipse 9开发几分钟后,我开始看到只有重新启动Eclipse才能解决的错误。在此之前,Java 9支持工作得很好。
我使用Gradle并通过Buildship导入项目
症状
通常情况下,一些Java工具交互失败,在最近的例子中是“Reference -> Workspace”。错误日志窗口中的堆栈跟踪是
java.lang.NullPointerException
at org.eclipse.jdt.internal.compiler.lookup.BinaryModuleBinding.create(BinaryModuleBinding.java:64)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getModuleFromAnswer(LookupEnvironment.java:427)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForTypeFromModules(LookupEnvironment.java:367)
在此之后,编辑文件时触发的任何编译都会导致神秘的错误,例如
The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
研究/我尝试过的事情
跟踪
Caused by: java.nio.channels.ClosedByInterruptException
at java.base/java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:199)
at java.base/java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.java:386)
at jdk.internal.jrtfs.JrtFileSystem$1.read(JrtFileSystem.java:376)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:109)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103)
at java.base/java.nio.file.Files.read(Files.java:3160)
at java.base/java.nio.file.Files.readAllBytes(Files.java:3213)
at org.eclipse.jdt.internal.compiler.util.JrtFileSystem.getClassfileBytes(JRTUtil.java:330)
at org.eclipse.jdt.internal.compiler.util.JrtFileSystem.getClassfileContent(JRTUtil.java:311)
at org.eclipse.jdt.internal.compiler.util.JRTUtil.getClassfileContent(JRTUtil.java:153)
at org.eclipse.jdt.internal.core.AbstractClassFile.getClassFileContent(AbstractClassFile.java:187)
eclipse.ini
我找到的各种解决方案都涉及更改eclipse.ini中的eclipse.ini行,但是4.7.2是随--add-modules=ALL-SYSTEM
一起提供的,我对eclipse.ini所做的唯一调整就是添加了-vm参数,使其指向Java9JDK
-vm
C:/adam/apps/jdk-9.0.4_windows-x64_bin/bin/javaw.exe
环境
发布于 2018-03-23 22:23:04
这是由Eclipse 525842引起的。
简而言之,问题发生在发生某种交互时,涉及从9月220中引入的新的Java9运行时文件系统读取Eclipse。Eclipse使用Thread.interrupt()
中断线程,这会导致没有人例外的java.nio.channels.ClosedByInterruptException
。这破坏了JDT和所有后续操作。进行后台编译的批处理编译器似乎不受此问题的影响。
在写这篇文章的时候,这个bug已经固定在M7光子的构建中,并且还被支持到氧气释放3中。
然而,它似乎并没有出现在氧气3或光子M7压缩文件。它可以通过从http://download.eclipse.org/eclipse/downloads/找到最新的集成构建,然后下载JDT,例如org.eclipse.jdt-4.7.3aRC2.zip并通过添加新的软件->软件站点-> Archive来添加。
https://stackoverflow.com/questions/49047019
复制相似问题