Я установил 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");
}
}
Похоже на компиляцию источника 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 6 является все еще значением по умолчанию (совместимость с более старыми программами?). Для принуждения использования времени выполнения Java 7 используйте прямой путь для него:
/usr/lib/jvm/java-7-openjdk-amd64/bin/java tes
(замена amd64
i386
для 32-разрядной версии 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
Смотрите на этот поток Java.net http://www.java.net/node/664117
Таким образом, это происходит, когда Вы компилируете свой код с одной версией JDK, но затем пытаетесь выполнить скомпилированный код на более старой версии JDK. Так, например, если Вы скомпилируете свой код с JDK6, но попытаетесь выполнить его с JDK5, то Вы получите эту ошибку.
Если Вы компилируете и выполняете test.java на том же ПК, затем сравните выводы следующих команд. Я полагаю, что они дадут числа отдельной версии.
javac -version
java -version
Если Вы компилируете на одном ПК и затем работаете на другом, то сравниваете вывод первой команды от ПК, откуда Вы компилируете в вывод второй команды ПК, где Вы запускаете программу.
Также помогло бы, добавляете ли Вы эту информацию о версии к своему вопросу.
Вы записали, что пытались скомпилировать файл test.java
с javac tes.java
- это не будет работать независимо от Вашего JDK потому что *.java
имя файла должно соответствовать названию своего класса; и я предполагаю, что существует нет tes.java file
. Так, делает javac test.java
работа?
Дополнительная информация от javac
страница справочника:
"Названия файла исходного кода должны иметь .java суффиксы, имена файлов класса должны иметь .class суффиксы, и и источник и файлы класса должны иметь корневые имена, которые определяют класс. Например, класс под названием MyClass был бы записан в исходном файле по имени MyClass.java и скомпилирован в файл класса байт-кода по имени MyClass.class".
Каждый сгенерированный файл класса имеет основную и вспомогательную версию в нем. Поскольку конкретные jvm поддерживают диапазон, который прибывает в основной и вспомогательной версии. Так Ваш компилируемый файл класса имеют старшую версию затем Ваша поддержка jvm. Теперь у Вас есть два выбора, можно использовать "1,6 компилятора Java" или "1,7 Java".
Попробовав все вышеупомянутое, Если это все еще не работает. Попытайтесь выполнить файл ниже команд:
javac tes.java
java -cp "." tes
Этот вид ошибок наблюдается, когда переменная ПУТИ К КЛАССУ не установлена. Даже у меня была та же проблема. Не мог просто выполнить его. С вышеупомянутыми командами это действительно работало.
Для получения дополнительной информации о ПУТИ К КЛАССУ.
Использовать sudo update-alternatives --config java
и устанавливает версия, которую можно хотеть использовать.