Не может выполнить программу Java: UnsupportedClassVersionError

Я установил JDK 6, но я не могу выполнить программу Java.

Например, я сделал test.java. Я компилирую его с javac tes.java и нет никакой ошибки, когда я компилирую его, но когда я хочу выполнить ту программу, это всегда отображает ошибку. Я выполняю программу Java с java tes.

Exception in thread "main" java.lang.UnsupportedClassVersionError: tes : 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)
Could not find the main class: tes. Program will exit.

Моя javac версия 1.7.0, моя версия Java 1.6.0.

Вот мой tes.java код:

class tes{

    public static void main(String[]args){
        System.out.println("hello");    
    }   

}
4
задан 6 April 2012 в 20:15

6 ответов

Похоже на компиляцию источника Java с более новой версией Java (7), который не может быть выполнен более старой Средой выполнения Java (6). Если Вы не нуждаетесь/хотите в Java 7, удалите openjdk-7-jdk пакет и установка openjdk-6-jdk вместо этого:

sudo apt-get remove openjdk-7-jdk
sudo apt-get install openjdk-6-jdk

Альтернатива использует прямые пути для определенных версий компилятора или времени выполнения:

Выполнение времени выполнения Java 7

Возможно, что Java 6 является все еще значением по умолчанию (совместимость с более старыми программами?). Для принуждения использования времени выполнения Java 7 используйте прямой путь для него:

/usr/lib/jvm/java-7-openjdk-amd64/bin/java tes

(замена amd64 i386 для 32-разрядной версии Java)

Выполнение версии 6 компилятора Java

Если Вы хотите иметь код, скомпилированный для версии 6 Java, используйте полный путь для компилятора Java 6:

/usr/lib/jvm/java-6-openjdk/bin/javac tes.java

Альтернативы

Как я сказал прежде, если Вам не нравится версия 7 или 6, удалите ее (openjdk-7-jdk и openjdk-7-jre для версии 7, openjdk-6-jdk и openjdk-6-jre для версии 6). Возможно иметь обе установленные версии. Используйте систему альтернатив для конфигурирования по умолчанию. Работайте ниже команд для конфигурирования времени выполнения и компилятора. Это предоставит Вам выбор для значения по умолчанию.

sudo update-alternatives --config java
sudo update-alternatives --config javac
5
ответ дан 1 December 2019 в 09:06

Смотрите на этот поток Java.net http://www.java.net/node/664117

Таким образом, это происходит, когда Вы компилируете свой код с одной версией JDK, но затем пытаетесь выполнить скомпилированный код на более старой версии JDK. Так, например, если Вы скомпилируете свой код с JDK6, но попытаетесь выполнить его с JDK5, то Вы получите эту ошибку.

Если Вы компилируете и выполняете test.java на том же ПК, затем сравните выводы следующих команд. Я полагаю, что они дадут числа отдельной версии.

javac -version
java -version

Если Вы компилируете на одном ПК и затем работаете на другом, то сравниваете вывод первой команды от ПК, откуда Вы компилируете в вывод второй команды ПК, где Вы запускаете программу.

Также помогло бы, добавляете ли Вы эту информацию о версии к своему вопросу.

2
ответ дан 1 December 2019 в 09:06

Вы записали, что пытались скомпилировать файл test.java с javac tes.java - это не будет работать независимо от Вашего JDK потому что *.java имя файла должно соответствовать названию своего класса; и я предполагаю, что существует нет tes.java file. Так, делает javac test.java работа?

Дополнительная информация от javac страница справочника:

"Названия файла исходного кода должны иметь .java суффиксы, имена файлов класса должны иметь .class суффиксы, и и источник и файлы класса должны иметь корневые имена, которые определяют класс. Например, класс под названием MyClass был бы записан в исходном файле по имени MyClass.java и скомпилирован в файл класса байт-кода по имени MyClass.class".

0
ответ дан 1 December 2019 в 09:06

Каждый сгенерированный файл класса имеет основную и вспомогательную версию в нем. Поскольку конкретные jvm поддерживают диапазон, который прибывает в основной и вспомогательной версии. Так Ваш компилируемый файл класса имеют старшую версию затем Ваша поддержка jvm. Теперь у Вас есть два выбора, можно использовать "1,6 компилятора Java" или "1,7 Java".

1
ответ дан 1 December 2019 в 09:06

Попробовав все вышеупомянутое, Если это все еще не работает. Попытайтесь выполнить файл ниже команд:

javac tes.java
java -cp "." tes

Этот вид ошибок наблюдается, когда переменная ПУТИ К КЛАССУ не установлена. Даже у меня была та же проблема. Не мог просто выполнить его. С вышеупомянутыми командами это действительно работало.

Для получения дополнительной информации о ПУТИ К КЛАССУ.

1
ответ дан 1 December 2019 в 09:06

Использовать sudo update-alternatives --config java и устанавливает версия, которую можно хотеть использовать.

0
ответ дан 1 December 2019 в 09:06

Другие вопросы по тегам:

Похожие вопросы: