4 votes

Impossible d'exécuter le programme Java : UnsupportedClassVersionError

J'ai installé le JDK 6, mais je ne parviens pas à exécuter un programme Java.

Par exemple, j'ai créé test.java. Je le compile avec javac tes.java et il n'y a pas d'erreur lorsque je le compile, mais lorsque je veux exécuter ce programme, il affiche toujours une erreur. J'exécute le programme Java avec 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.

Ma version de javac est 1.7.0, ma version de java est 1.6.0.

Voici mon tes.java code :

class tes{

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

}

5voto

Lekensteyn Points 162346

Il semble que vous ayez compilé le source Java avec une version plus récente de Java (7) qui ne peut pas être exécutée par l'ancien runtime Java (6). Si vous n'avez pas besoin/veut Java 7, désinstallez l'application openjdk-7-jdk et installer openjdk-6-jdk à la place :

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

L'alternative est d'utiliser les chemins directs vers les versions spécifiques du compilateur ou du runtime :

Exécution du runtime Java 7

Il est possible que Java 6 soit encore le programme par défaut (compatibilité avec les anciens programmes ?). Pour forcer l'utilisation du runtime Java 7, utilisez le chemin direct vers celui-ci :

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

(remplacer amd64 par i386 pour la version 32 bits de Java)

Exécution du compilateur Java version 6

Si vous souhaitez que le code soit compilé pour la version 6 de Java, utilisez le chemin d'accès complet au compilateur Java 6 :

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

Alternatives

Comme je l'ai déjà dit, si vous n'aimez pas la version 7 ou 6, désinstallez-la ( openjdk-7-jdk y openjdk-7-jre pour la version 7, openjdk-6-jdk y openjdk-6-jre pour la version 6). Il est possible d'avoir les deux versions installées. Utilisez le système alternatif pour configurer la version par défaut. Exécutez les commandes ci-dessous pour configurer le runtime et le compilateur. Il vous sera proposé un choix pour la version par défaut.

sudo update-alternatives --config java
sudo update-alternatives --config javac

2voto

Matthew Steeples Points 4637

Jetez un coup d'œil à ce fil de discussion de Java.net. http://www.java.net/node/664117

En résumé, cela se produit lorsque vous compilez votre code avec une version du JDK, mais que vous essayez ensuite d'exécuter le code compilé sur une version plus ancienne du JDK. Ainsi, par exemple, si vous compilez votre code avec le JDK6 mais essayez de l'exécuter avec le JDK5, vous obtiendrez cette erreur.

Si vous compilez et exécutez test.java sur le même PC, veuillez comparer les résultats des commandes suivantes. Je pense qu'elles donneront des numéros de version distincts.

javac -version
java -version

Si vous compilez sur un PC et exécutez sur un autre, comparez la sortie de la première commande du PC où vous compilez à la sortie de la deuxième commande du PC où vous exécutez le programme.

Il serait également utile d'ajouter cette information de version à votre question.

1voto

Arham Points 11

Chaque fichier de classe généré contient une version majeure et mineure. Parce que le jvm particulier supporte une gamme qui vient dans la version majeure et mineure. Ainsi, votre fichier de classe compilé a une version plus élevée que celle supportée par votre jvm. Maintenant vous avez deux choix, vous pouvez utiliser le compilateur java 1.6 ou java 1.7.

1voto

Ashwin Points 11

Après avoir essayé tout ce qui précède, si cela ne fonctionne toujours pas. Essayez d'exécuter le fichier les commandes ci-dessous :

javac tes.java
java -cp "." tes

Ce type d'erreur est observé lorsque la variable CLASSPATH n'est pas définie. J'ai eu le même problème. Je n'ai pas pu l'exécuter. Avec les commandes ci-dessus, cela a fonctionné.

Pour de plus amples informations sur CLASSPATH .

0voto

Aaron Orr Points 11

Vous avez écrit que vous avez essayé de compiler le fichier test.java con javac tes.java - cela ne fonctionnera pas indépendamment de votre JDK, car l'option *.java Le nom du fichier doit correspondre au nom de sa classe, et je suppose qu'il n'y a pas de nom de classe. tes.java file . Alors, est-ce que javac test.java travail ?

Informations complémentaires de la javac page de manuel :

"Les noms de fichiers de code source doivent avoir un suffixe .java, les noms de fichiers de classe doivent avoir un suffixe .class, et les noms de fichiers de code source doivent avoir un suffixe .java. les fichiers source et les fichiers de classe doivent avoir des noms de racine qui identifient la classe. Par exemple, un classe appelée MyClass serait écrit dans un fichier source appelé MyClass.java et compilé dans un fichier de classe en bytecode appelé MyClass.class ."

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X