Pb chargement classe

Fermé
Utilisateur anonyme - 27 oct. 2012 à 11:46
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 27 oct. 2012 à 18:48
Bonjour,

Je créé actuellement un launcher personnalisé pour mon serveur.
Mon launcher tourne très bien avec java 7 sur windows.
Mais avec java 6 et sur MAC OS leopard, il plante.

Avec eclispe, j'ai essayer de le compiler avec JDK5 et lors du chargement de la fenêtre du jeu (minecraft), il dit :
Exception in thread "Thread-4"
java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at System_ModdedClassLoader.b(System_ModdedClassLoader.java:13)
at System_ModdedClassLoader.findClass(System_ModdedClassLoader.java:11)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at net.minecraft.client.MinecraftApplet.init(SourceFile:36)
at Main_RealLauncher.startMinecraft(Main_RealLauncher.java:129)
at Web_MinecraftUpdater.Updater_ConfigFileExists(Web_MinecraftUpdater.java:26)
at Web_MinecraftUpdater.mainMinecraftUpdater(Web_MinecraftUpdater.java:7)
at Web_MainTransaction.Main_OnlineLogin(Web_MainTransaction.java:56)
at Main_RealLauncher.startLogin(Main_RealLauncher.java:47)
at GuiForm_MainFrame$2$1.run(GuiForm_MainFrame.java:152)


Comment on pourrait rendre se launcher compatible avec java 5 au minimum?
D'après certain site il s'agirait d'eclipse.

Voici les captures d'écran :
http://hpics.li/b7df75f
http://hpics.li/5ed53ae

2 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
27 oct. 2012 à 18:48
Attention : il y a un piège insidieux avec la rétro-compatibilité.

En demandant de compiler avec Java 5, Eclipse exclut toutes les classes existant dans les versions 6 et 7, et compile un byte-code compatible Java 5.

Cependant, à l'exécution, Eclipse continue d'utiliser les classes de Java 7 car ce sont les seules dont il dispose, mais le comportement peut être différent.

Par exemple à la compilation on demande à utiliser une classe A.
Or il se trouve qu'en fait cette classe A va utiliser une classe B avec Java 7, mais une classe C avec Java 5. Donc à la compilation ça ne change rien, puisqu'on demande juste d'utiliser A. Mais à l'exécution Eclipse qui est sous Java 7 va utiliser B alors qu'un vrai programme Java 5 devrait utiliser C.

Ceci explique pourquoi cela peut fonctionner sous le Java 7 où il a été compilé, et planter sur le Java 6 de ton Mac... Car l'exécution est différente.

Ce qu'il faut faire ce n'est pas utiliser la rétro-compatibilité (c'est à dire compiler avec Java 7) mais utiliser un vrai JDK 5 pour compiler directement avec Java 5.

Cependant, je doute que cela règle totalement le problème, car tu as des bibliothèques complémentaires (Minecraft notamment) qui devront également être compatible avec la JDK 5, ce qui va être un peu dur à trouver, parce que Java 5 commence à dater un peu...
0
doctormad Messages postés 430 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 2 avril 2015 99
27 oct. 2012 à 17:58
Eclipse est un nid à bug donc oui c'est probable, essaie un autre IDE.

Pour ce qui est de java les versions antérieures à la 7 ont des failles critiques de sécurité il est donc recommandé de ne pas les utiliser, en fait selon moi il faut arrêter d'utiliser java tout simplement, parce que demain ce sera la version 7 qui sera révélée comme faillible et c'est révélateur de la qualité apportée à sa vm.
-1