Что мне нужно сделать, чтобы интерпретировать эту Java-программу? - PullRequest
0 голосов
/ 30 сентября 2018

Я только начинаю использовать Java.Я следовал инструкциям в ответе на этот вопрос , чтобы скомпилировать и запустить мою первую программу на Java.Я только что установил JDK 11 и установил путь к C:\Program Files\Java\jdk-11\bin.Сделав это, я смог скомпилировать свою программу, используя следующую команду:

javac HelloWorld.java

(файл называется HelloWorld.java.)

В результате этого файлапод названием HelloWorld.class появится в каталоге.Теперь я попытался запустить программу с помощью этой команды:

java HelloWorld

Это не работает.Я получаю следующий вывод:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: HelloWorld has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

Я смотрел на этот вопрос , который в сочетании с сообщением об ошибке, которое я получаю, подсказывает мне, что независимо от того, на какой Java работает моя программа, подразумеваетсядля файлов более старых версий, чем мой компилятор.

Следуя совету ответа на поставленный выше вопрос, я попытался запустить javac -target 8 HelloWorld.java.Однако это тоже не работает.Я получаю следующее предупреждение:

warning: target release 8 conflicts with default source release 11

и HelloWorld.class не создается.

У меня такое ощущение, что мне нужна Java Runtime Environment 11, но я не знаю, как вывозьми.Поисковые запросы типа "get JRE 11" возвращают меня на главную страницу загрузки Java , которая предлагает "версию 8".

Приложение: каталог, который я храню HelloWorld.java in называется java, если это имеет значение.

1 Ответ

0 голосов
/ 30 сентября 2018

Похоже, на вашем компьютере установлен Public JRE 8.Установщик общедоступной JRE копирует ее java.exe и javaw.exe в C:\Windows\System32 и вносит некоторые другие изменения в Windows, например изменения в реестре.Этот каталог C:\Windows\System32 по умолчанию зарегистрирован в системной части переменной среды PATH.В Windows у вас есть системные и пользовательские определения переменной среды PATH, и системная часть появляется первой в последней переменной среды PATH.Вы можете проверить окончательный результат PATH, введя команду path в окне cmd.Таким образом, когда вы запускаете java, первый java.exe Windows находит и фактически запускает тот, который находится в каталоге C:\Windows\System32, и этот java.exe относится к Public JRE 8, который не может запускать классы более новой Java.

В отличие от предыдущих выпусков JDK, JDK 11 не имеет Public JRE, поэтому после установки JDK 11 ваш Public JRE 8 не был обновлен.Просто удалите все ваши публичные JRE, и это решит вашу проблему.Вы можете оставить предыдущие JDK установленными, они не будут вам мешать.

...