Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是什么导致Eclipse抛出新的JavaModelException?_Java_Eclipse_Java 9_Eclipse Oxygen - Fatal编程技术网

是什么导致Eclipse抛出新的JavaModelException?

是什么导致Eclipse抛出新的JavaModelException?,java,eclipse,java-9,eclipse-oxygen,Java,Eclipse,Java 9,Eclipse Oxygen,在Windows 10上,我下载并安装了Eclipse Oxygen[版本(4.7.1a)) 构建id:20171005-1200]使用 然后,我使用新建项目向导创建了一个简单的Java项目(没有模块内容): 它运行正常,如果我为test()或doStuff()或System或String或toString()或substr()打开实现,一切都很好 但是,对于println()和print()会显示一条错误消息: 此外,堆栈跟踪会写入错误日志: !!条目org.eclipse.jdt

在Windows 10上,我下载并安装了Eclipse Oxygen[版本(4.7.1a)) 构建id:20171005-1200]使用

  • 然后,我使用新建项目向导创建了一个简单的Java项目(没有模块内容):

    • 它运行正常,如果我为test()doStuff()SystemStringtoString()substr()打开实现,一切都很好

    • 但是,对于println()print()会显示一条错误消息:

    • 此外,堆栈跟踪会写入错误日志:
    !!条目org.eclipse.jdt.ui 4 0 2017-10-23 01:42:54.695!消息 搜索“打印”的实现时出错。看见 有关详细信息,请查看错误日志!堆栈1Java模型异常:Java模型 状态[不在其项目的生成路径上] org.eclipse.jdt.internal.core.JavaElement.newJavaModelException(JavaElement.java:570) 在 org.eclipse.jdt.internal.core.Openable.generateInfo(Openable.java:247) 在 org.eclipse.jdt.internal.core.Openable.open祖先(Openable.java:505) 在 org.eclipse.jdt.internal.core.Openable.generateInfo(Openable.java:241) 在 org.eclipse.jdt.internal.core.Openable.open祖先(Openable.java:505) 在 org.eclipse.jdt.internal.core.Openable.generateInfo(Openable.java:241) 在 org.eclipse.jdt.internal.core.SourceRefElement.generateInfo(SourceRefElement.java:107) 在 org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:583) 在 org.eclipse.jdt.internal.core.BinaryType.getElementInfo(BinaryType.java:287) 在 org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:306) 在 org.eclipse.jdt.internal.core.BinaryType.isInterface(BinaryType.java:725) 在 org.eclipse.jdt.internal.ui.javaeditor.JavaElementImplementationHyperlink$1.run(JavaElementImplementationHyperlink.java:237) 在 org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:119) !子条目1 org.eclipse.jdt.core 4 1006 2017-10-23 01:42:54.695 !消息不在其项目的生成路径上

    • 但是,单击确定后,将按预期显示实现弹出窗口,单击打印流将我发送到正确的方法实现:

    这看起来像Eclipse或其安装程序中的一个bug,但问题非常基本,但我没有看到任何关于它的报告。我有几个问题:

    • 还有其他人知道这个问题吗,或者它是否有效

    • 我是否可以/应该进行任何配置来修复此问题

    • 你知道为什么开放实现只会给出print()println()的错误吗


    正如@Stephan所指出的,这似乎是当前实施中的一个缺陷,他与Stephan分享了一份关于未来版本状态的正在进行的文档:-

    注意:使用Java Runtime 9运行Eclipse以获得Java 9支持不是强制性的。但是,需要启用Java运行时9 针对系统编译模块化项目的项目构建路径 模块

    将Java Runtime 9添加到项目的生成路径时,系统模块将列在包资源管理器的系统库下


    我假设
    --add modules=ALL-SYSTEM
    解决了这个问题,而用户将它作为
    -vmargs
    arg添加到
    eclipse.ini

    您的意思是说您可以访问其他方法(除了
    print()
    println()
    )在
    java.base
    模块中没有出现此错误?我复制了您的错误。对我来说似乎是个bug。我在Eclipse bug数据库中发现了类似的东西:@nullpointer问得好,答案是否定的。在进一步的测试中,我似乎可以查看java.base中任何类的实现(例如System、ArrayList),但没有方法。@skomisa Ya似乎与ZhekaKozlov共享的链接一致。也许我遗漏了什么,但我不确定这是否相关,因为我的项目不是模块化的。另外,当我用使用jdk9而不是JavaSE-9的向导创建第二个项目时,上面屏幕截图中的“java.activation”和“java.corba”条目消失了。否则,第二个项目的行为与第一个项目完全相同。i、 它编译并运行正常,但对于一些java.base方法仍然给出了“open implementation”错误,尽管我可以对String.toString()进行“open implementation”。@skomisa
    String.toString()
    本身也是通过
    java.lang
    导出的。因此,我不明白为什么它应该可以访问,而
    系统..
    不应该访问。另外,在使用JDK9创建项目时——理想的方法应该是使用JavaSE9,我很想知道您是否在另一方面明确地修改了它。
    public class Demo1 {
    
      public static void main(String[] args) {
          new Demo1().test(0L);
      }
    
      void test(int i) {
          doStuff();
      }
    
      void test(long l) {
          doStuff();
      }
    
      void doStuff() {
          String s = "abcde";
          s = s.substring(2,4);
          System.out.print("s=");
          System.out.println( s.toString());
      }
    
    }