Pb chargement classe
Utilisateur anonyme
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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
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
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...
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...
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.
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.