Невозможно запустить мою программу после компиляции из-за ошибки неподдерживаемой версии класса - PullRequest
0 голосов
/ 27 января 2012

Я новый пользователь для Linux. Я только что установил jdk1.7.0_02.rpm и попытался скомпилировать мою программу, используя javac tester.java Когда я пытаюсь запустить файл с помощью java tester, я получаю эти ошибки

Exception in thread "main" java.lang.UnsupportedClassVersionError: tester : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)

Не удалось найти основной класс: тестер. Программа закроется.

Затем я проверил версию Java и это было:

java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.4) (fedora-61.1.10.4.fc16-i386)
OpenJDK Server VM (build 20.0-b11, mixed mode)

Теперь, как мне изменить эту версию? Я даже установил jre1.7.0_02, но ничего не изменилось!

Вот что происходит:

enter image description here

Ответы [ 5 ]

4 голосов
/ 27 января 2012

Запуск в терминале:

sudo update-alternatives --config java

И выберите предпочтительную версию Java. Если вы не видите нужную версию в качестве опции, посмотрите на этот сайт.

2 голосов
/ 27 января 2012

Используйте опции кросс-компиляции из javac. Укажите версии -source и -target и следуйте инструкциям для других параметров.


Тогда расскажите пожалуйста как?

javac -source 1.6 -target 1.6 -bootclasspath /path/to/1.6/j2se/rt.jar *.java

Если вы укажете source / target, компилятор 1.7 предупредит об использовании опции -bootclasspath, которая важна для проверки доступности классов, методов и атрибутов, на которые имеются ссылки в источнике, в целевом Jar-файле. Более ранние версии компилятора не смогли предупредить о bootclasspath.

0 голосов
/ 06 сентября 2013

Без всякой причины, JAVA_HOME в системной среде тоже должен быть установлен. Хотя, если вы установите JAVA_HOME в свойствах приложения.

0 голосов
/ 27 января 2012

Ваша система должна использовать JRE 1.7 при запуске Java-программ. Для этого убедитесь, что JAVA_HOME правильно установлен в JRE 1.7:

export JAVA_HOME=/path/to/JRE1.7

Также убедитесь, что переменная PATH указывает на правильный каталог java / bin:

export PATH=$PATH:/path/to/JRE1.7/bin

Сохранение этих переменных среды после перезагрузки / выхода из системы зависит от используемого вами дистрибутива Linux ...

РЕДАКТИРОВАТЬ : Для пояснения: если вы компилируете с версией 1.7 (для цели 1.7 по умолчанию), вы должны использовать> = 1.7 JRE.

Итак, у вас есть 2 варианта:

  1. Использование JRE 1.7 для запуска программы, которую вы скомпилировали с 1.7 (как описано выше)
  2. Создание совместимого кода 1.6 с использованием cmdline-аргумента "-target 1.6" для javac, когда
    компиляции.
0 голосов
/ 27 января 2012

Хорошо, во-первых, вы не должны запускать сборки приложений Java от имени root.

Перейдите на учетную запись пользователя с возможностью sudo и не используйте привилегированные привилегии пользователя root, пока они вам абсолютно не понадобятся.

Похоже, что javac был обновлён до версии 7, а java - нет.

Что это возвращает:

javac -version

Вы также должны сообщить нам текущее значение вашей переменной среды JAVA_HOME.Как это:

set | grep ^JA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...