Что заставляет Eclipse Oxygen 1a вызывать исключение newJavaModelException?

  • В Windows 10 я загрузил и установил Eclipse Oxygen [выпуск (4.7.1a) Build id: 20171005-1200], используя Eclipse Установщик.

  • Затем я создал тривиальный проект Java (без модуля) с помощью мастера создания нового проекта:

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());
  }

}
  • Он работает нормально, и если я выполню CTL=>Открыть реализацию для test() или doStuff() или System или String или toString() или substr() все в порядке.

  • Однако для println() и print() отображается сообщение об ошибке:

Открыть реализацию

  • Также в журнал ошибок записывается трассировка стека:

!ENTRY org.eclipse.jdt.ui 4 0 23.10.2017 01:42:54.695 !СООБЩЕНИЕ Произошла ошибка при поиске реализаций 'print'. Подробности смотрите в журнале ошибок. !STACK 1 Исключение модели Java: статус модели Java [не указан в пути сборки проекта] в org.eclipse.jdt.internal.core.JavaElement.newJavaModelException(JavaElement. java:570) в org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:247) в org.eclipse.jdt.internal.core.Openable.openAncestors(Openable.java:505) в org.eclipse .jdt.internal.core.Openable.generateInfos(Openable.java:241) в org.eclipse.jdt.internal.core.Openable.openAncestors(Openable.java:505) в org.eclipse.jdt.internal.core.Openable .generateInfos(Openable.java:241) в org.eclipse.jdt.internal.core.SourceRefElement.generateInfos(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.eclips e.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) !SUBENTRY 1 org.eclipse.jdt.core 4 1006 2017-10-23 01:42:54.695 !MESSAGE не находится на пути сборки своего проекта

  • Однако после нажатия ОК всплывающее окно Реализация отображается, как и ожидалось, и нажатие PrintStream отправляет меня к правильной реализации метода:

Реализация

Это похоже на ошибку в Eclipse или ее установщике, но проблема очень простая, но я не вижу никаких отчетов о ней. У меня возникает несколько вопросов:

  • У кого-нибудь еще есть эта проблема, или она работает?

  • Есть ли какая-либо конфигурация, которую я мог бы/должен сделать, чтобы исправить это?

  • Есть идеи, почему Открытая реализация будет выдавать ошибку только для print() и println()?


person skomisa    schedule 23.10.2017    source источник
comment
Вы также хотите сказать, что можете получить доступ к другим методам (кроме print() и println()) из модуля java.base без этой ошибки?   -  person Naman    schedule 23.10.2017
comment
Я воспроизвел вашу ошибку. Похоже на ошибку для меня.   -  person ZhekaKozlov    schedule 23.10.2017
comment
Я нашел нечто подобное в базе данных ошибок Eclipse: bugs.eclipse.org/bugs/show_bug .cgi?id=521995   -  person ZhekaKozlov    schedule 23.10.2017
comment
@nullpointer Хороший вопрос, и ответ - нет. При дальнейшем тестировании кажется, что я могу просматривать реализацию любого класса в java.base (например, System, ArrayList), но не методы.   -  person skomisa    schedule 23.10.2017
comment
@skomisa Ya, похоже, соответствует ссылке, которой поделился Жека Козлов.   -  person Naman    schedule 23.10.2017
comment
@ZhekaKozlov Спасибо - я пропустил эту ошибку. Если вы опубликуете это как ответ, я приму это. Это не точное совпадение, но достаточно близкое, и bugs.eclipse.org/bugs /show_bug.cgi?id=522057 также выглядит уместно.   -  person skomisa    schedule 23.10.2017
comment
@skomisa Также в этой заметке, добавили ли вы JDK при настройке проекта?   -  person Naman    schedule 23.10.2017
comment
@nullpointer Нет, я не добавлял JDK, так как предполагал, что установщик обновляет существующую установку Eclipse. (Это первый раз, когда я его использовал.) Есть ли что-то, что я мог/должен сделать?....   -  person skomisa    schedule 23.10.2017
comment
@skomisa Вероятно, в части Мастер создания проекта вам следует искать, как проект настроен с помощью java sdk. Должен быть настроен путь для библиотеки Java.   -  person Naman    schedule 23.10.2017


Ответы (1)


Кажется, это ошибка в текущей реализации, на что указывает @ZhekaKozlov и из другой темы, где @Stephan поделился незавершенная документация для будущего выпуска Новое и заслуживающее внимания для Photon M3 утверждает, что: -

Примечание. Не обязательно запускать Eclipse с Java Runtime 9, чтобы получить поддержку Java 9. Однако среда выполнения Java 9 должна находиться на пути сборки проекта для компиляции модульного проекта с системными модулями.

Когда Java Runtime 9 добавляется в путь сборки проекта, системные модули отображаются в системной библиотеке в проводнике пакетов:

введите здесь описание изображения

Я предполагаю, что --add-modules=ALL-SYSTEM решал эту проблему, пока пользователи добавляли это как аргумент -vmargs к eclipse.ini.

person Naman    schedule 23.10.2017
comment
Возможно, я что-то упускаю, но я не уверен, что это актуально, поскольку мой проект не модульный. Кроме того, когда я создал второй проект с помощью мастера, который использовал jdk9, а не JavaSE-9, записи java.activation и java.corba на снимке экрана выше исчезли. В остальном второй проект вел себя точно так же, как и первый. то есть он скомпилировался и запустился нормально, но все же выдал ошибку открытой реализации для некоторых методов java.base, хотя я могу открыть реализацию для String.toString(). - person skomisa; 23.10.2017
comment
@skomisa String.toString() также экспортируется java.base через java.lang. Поэтому я не вижу причин, по которым он должен быть доступен, а System.. не должен быть. Также на заметку о создании проекта с JDK9. Идеальным способом должно быть использование JavaSE9, мне очень хотелось узнать, с другой стороны, вы явно изменили это или нет. - person Naman; 23.10.2017