web-dev-qa-db-fra.com

java.lang.UnsupportedClassVersionError

Quand j'ai exécuté un programme Java, j'ai reçu cette erreur .. Pourriez-vous s'il vous plaît suggérer pourquoi nous obtenons cette erreur:

Exception in thread "main" Java.lang.UnsupportedClassVersionError: 
    GenerateInvoice (Unsupported major.minor version 49.0)
        at Java.lang.ClassLoader.defineClass0(Native Method)
        at Java.lang.ClassLoader.defineClass(ClassLoader.Java:539)
        at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:123)
        at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:251)
        at Java.net.URLClassLoader.access$100(URLClassLoader.Java:55)
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:194)
        at Java.security.AccessController.doPrivileged(Native Method)
        at Java.net.URLClassLoader.findClass(URLClassLoader.Java:187)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:289)
        at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:274)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:235)
        at Java.lang.ClassLoader.loadClassInternal(ClassLoader.Java:302)
51
user1614043

Cette classe a été compilée avec un JDK plus récent que celui utilisé pour l'exécution.

Le plus simple est d'installer un JRE plus récent sur l'ordinateur sur lequel vous exécutez le programme. Si vous pensez en avoir installé une récente, vérifiez les variables d’environnement Java_HOME et PATH.

La version 49 est Java 1.5. Cela signifie que la classe a été compilée avec (ou pour) un JDK qui est encore ancien. Vous avez probablement essayé d'exécuter la classe avec JDK 1.4. Vous devriez vraiment en utiliser un de plus. recent (1.6 ou 1.7, voir historique des versions Java ).

89
Denys Séguret

Une autre option consiste à supprimer toutes les classes et à reconstruire. Avoir un fichier de compilation est une solution idéale pour contrôler tout le processus, comme la compilation, le packaging et le déploiement. Vous pouvez également spécifier des versions source/cible

4
Satheesh Cheveri

Le code a très probablement été compilé avec un JDK ultérieur (sans utiliser options de compilation croisée ) et est en cours d'exécution sur un ancien JRE. Bien que la mise à niveau de JRE soit une solution, il serait préférable d'utiliser les options de compilation croisée pour garantir que le code s'exécutera sur toute version de JRE conçue comme version minimale pour l'application.

1
Andrew Thompson