Bonjour,
je viens d'avoir un problème de compatibilité entre deux versions de java. Est-ce normal ?
(je travaille sous 1.506 et j'ai tenté de lancer le logiciel sous 1.4_12)
merci
Version imprimable
Bonjour,
je viens d'avoir un problème de compatibilité entre deux versions de java. Est-ce normal ?
(je travaille sous 1.506 et j'ai tenté de lancer le logiciel sous 1.4_12)
merci
oui, java possède une comaptibilité ascendante (ce qui marche en 1.4 marche en 1.5), mais surement pas descendante
;) merci.
:( maintenant la question épineuse, comment je m'en sors avec ça ?
car j'ai malheureusement besoin de rester en 1.4.2_12..Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Exception in thread "main" java.lang.UnsupportedClassVersionError: MaClasse (Un supported major.minor version 49.0) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source)
merci
Compile ton programme en 1.4.2 alors.Citation:
Envoyé par d_token
La version 49.0 signifie que ça a été compilé en 1.5. Tu ne pourras donc pas lancer ton application telle quelle, il faut la recompiler en 1.4.2 (je crois me souvenir d'une option "-target" à placer dans la ligne de commande pour la compilation pour spécifier la version de JVM pour laquelle tu veux compiler les classes)
merci de ta réponse
je travaille sous éclipse, et je viens (enfin ;p) de finir de modifier mes classes (en fin de compte, c'est selectionner le bon jdk qui m'a pris du temps)
(les modifs étaient : virer les <class> dans les déclarations de collections
=> un autre problème maintenant : "could not find the main class. Programm will exit"
:? juste en changeant de JDK/JRE...
Salut,
Le mieux est d'utiliser une version 1.4.2 pour le developpement !Citation:
Envoyé par plegat
En effet l'option -target a elle seule ne permet pas de s'assurer de la compatibilité absolu du code généré (il faut en plus lui associé les classes de l'API correspondant à la version via le bootclasspath).
a++
:( malheureusement, je crois qu'il y a eu un effet de bord désagréable suite au changement de JDK/JRE
lorsque j'essaie de compiler sous commande dos, j'obtiens le message suivant :
^^ le problème, est que la solution que j'ai trouvé partout ailleurs ne me convient pas du tout (:P installer la version 1.5 de JRE)Code:
1
2
3
4 class file has wrong version 49.0, should be 48.0 Please remove or make sure it appears in the correct subdirectory of the classpa th.
Si tu as cette erreur en compilant, cela signifie surement que tu utilises encore des classes compilé pour du Java 5.0...
Essayes de supprimer toutes tes fichiers *.class pour les regénérer et vérifies toutes tes librairies externes...
a++
et bien il crie aussi sur la classe GBC que j'ai téléchargé de la FAQ, mais aussi sur celle la :
lorsque j'essaie de compliler par ligne de commande MaClasse (sous eclipseil me dit juste qu'il ne trouve pas la classe main)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 import graphiqueInterface.Fenetre; import graphiqueInterface.database.DataAccess; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JOptionPane; import javax.swing.JTextField; public class ActionConnection implements ActionListener{ JTextField jtlogin; JTextField jtpass; public ActionConnection(JTextField _jtlogin,JTextField _jtpass ){ jtlogin=_jtlogin; jtpass=_jtpass; } public void actionPerformed(ActionEvent arg0) { try{ DataAccess dbTest = new DataAccess("",jtlogin.getText(),jtpass.getText()); dbTest.getTest(); new Fenetre(jtlogin.getText(),jtpass.getText()); }catch(Exception e){ JOptionPane.showMessageDialog(null, "Impossible de se connecter à la base de données. Vérifiez votre login et votre mot de passe", "Connexion impossible",JOptionPane.ERROR_MESSAGE); } } }
Juste un truc tu as deux programme que tu compile le principale et celui que tu utilise ou tu compile tout en un ?
Car tu dois compiler les sources qui sont en 1.4.2 avec le JDK 1.5 puis ensuite compiler tout en 1.5 si ton programme a été programmer en 1.5...
Sinon explique nous la procédure en détails...
Pour mieux te former à Java voir les tutoriels et cours de formation Java : http://java.developpez.com/cours/
Non, il a développé un programme en 1.5, et il doit absolument le faire tourner en 1.4.2.Citation:
Envoyé par Shiftane
Donc tout recompiler en 1.4.2 (sinon ça marche pas!)
Pour Eclipse, c'est à toi de lui spécifier la main class...
Project > Clean (décocher "start a build automatically" si tu veux gérer ça toi-même) pour virer les fichiers *.class
Run > Run As... > Java Application, et là tu lui dis qui est la main class
Et comme l'a précisé adiGuba, vérifie que tu n'utilises pas des classes externes qui soient compilées en 1.5 (facilement vérifiable, le message d'erreur t'indique quelle classe pose le problème de version).
j'ai virer manuellement les .class (j'avais fait clean de mon projet, mais ca n'a pas été efficace on dirait) et voila ce qui se passe :
"the import ...... cannot be resolved"
dans les fichiers qui l'appellent
et dans la classe en question :
rien, pas d'erreur.
(pour la procédure de compilation, j'ai choisi le JDK dans éclipse, et je ne compile qu'un seul programme consititué de plusieurs classes. Normalement, tout est compiler en 1.4)
Comme je l'ai dit, il faut décocher "start a build automatically"... sinon il te recrée les *.class automatiquement après les avoir effacés!Citation:
Envoyé par d_token
Tu devrais pouvoir t'en sortir tout seul, là, non?Citation:
Envoyé par d_token
Surtout si tu ne nous dit pas lequel!!! :D
Ca serait pas un import spécifique 1.5 par hasard?
il restait des erreurs dans le code (au sens 1.4 )
je les ai corrigées (mises entre commentaire)
et le programme compile sous invite de commande.
mais dès que je lance le programme, il me ressort le
Exception in thread "main" java.lang.NoClassDefFoundError: MaCLasse/class
[MODE=ironique]Citation:
Envoyé par d_token
Tu le lances comment?
Avec douceur ou pas?
[/MODE]
Plus sérieusement, on peut avoir les détails?
Tous les détails....
alors, la c'est l'out de ma ligne de commande
l'arborescence est :
defaut
MaClasse
ActionConnection
.....GUI
..........DATABASE
..........GUI2
et mon classpath :Code:
1
2
3
4
5
6
7 C:\Documents and Settings\user1\javaworkspace\Detective>javac MaClasse.java C:\Documents and Settings\user1\javaworkspace\MaClasse>java MaClasse.class Exception in thread "main" java.lang.NoClassDefFoundError: MaClasse/class C:\Documents and Settings\user1\javaworkspace\MaClasse>
PS : eclipse me fait un joli fatal exception occured. Program will exitCode:
1
2C:\Documents and Settings\user1\javaworkspace;C:\Documents and Settings\user1\Mes documents\librairies\Jdom\jdom-1.0\build\jdom.jar;C:\Documents and Settings\user1\javaworkspace\xmlya;.;C:\Documents and Settings\user1\javaworkspace\MaClasse\;C:\Documents and Settings\user1\javaworkspace\MaClasse\graphiqueInterface\database
sinon, rien à voir, mais je viens de créer un .JAR et tenter de l'exécuter.
il me dit :
Exception in thread "main" java.lang.Error: Do not use MaCLasse.setLayout() use
MaClasse.getContentPane().setLayout() instead
at javax.swing.JFrame.createRootPaneException(Unknown Source)
at javax.swing.JFrame.setLayout(Unknown Source)
at MaClasse.<init>(Detective.java:28)
at MaClasse.main(Detective.java:59)
^^ ce qui a peut-être un rapport.
:mouarf: Bon, :aie: CA MARCHE :mouarf:
:merci: pour votre aide :merci:
je m'en suis sorti en exécutant les .JAR et en modifiant la syntaxe au fur et à mesure
:alerte:Code:java MaClasse.class
La syntaxe est "java" "nom_complet_de_la_classe" et PAS le nom du fichier...
Si le ClassPath est correct et que la classe n'appartient à aucun package :
Mais pourquoi se trouve-t-elle dans un répertoire nommé MaClasse ????Code:java MaClasse
a++
:( he bien, elle ne s'y trouve pas