erreurs à l'exécution
Le
Bonjour à tous,
je m'initie à Java avec le livre "Programmer en Java" (éd Eyrolles).
J'ai téléchargé les exemples du livre et les ai tous regroupés dans le même répertoire, pour simplifier. J'essaie ce petit programme (en mode console MS DOS):
public class PremProg
//genesPremProg.java
{ public static void main (String[] args)
{ System.out.println ("Mon premier programme Java") ;
}
}
Pas d'erreur de compilation mais à l'exécution, j'ai la série de messages suivante:
Exception in thread "main" java.lang.NoClassDefFoundError: PremProg
Caused by: java.lang.ClassNotFoundException: PremProg
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)
Could not find the main class: PremProg. Program will exit.
Pouvez-vous m'indiquer ce qui cause ces erreurs?
Cordialement,
Michel
je m'initie à Java avec le livre "Programmer en Java" (éd Eyrolles).
J'ai téléchargé les exemples du livre et les ai tous regroupés dans le même répertoire, pour simplifier. J'essaie ce petit programme (en mode console MS DOS):
public class PremProg
//genesPremProg.java
{ public static void main (String[] args)
{ System.out.println ("Mon premier programme Java") ;
}
}
Pas d'erreur de compilation mais à l'exécution, j'ai la série de messages suivante:
Exception in thread "main" java.lang.NoClassDefFoundError: PremProg
Caused by: java.lang.ClassNotFoundException: PremProg
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)
Could not find the main class: PremProg. Program will exit.
Pouvez-vous m'indiquer ce qui cause ces erreurs?
Cordialement,
Michel
Tu as oublié de nous indiquer la ligne de commande que tu a utilisé.
As tu fait sous dos:
java PremProg
ou
java -classpath . PremProg
Vois tu le fichier PremProg.class dans le dossier courant? N'y a t-il
pas un problème de minuscule/majuscule dans le nom du fichier?
sam.
Bonjour Samuel,
- oui, le fichier PremProg.class existe bien;
- non, pas de problème majuscule/minuscule;
- je lance par java PremProg;
Quelle est l'utilité de l'option -classpath?
Cordialement,
Michel
mimidu74
Bonjour
-classpath sert à indiquer les répertoires dans lesquels aller chercher
les classes compilées. En principe le répertoire courant (.) fait
automatiquement partie de cette liste (mais tu peux toujours essayer
avec l'option...). Note : quand des bibliothèques sont utilisées sous
forme d'archives jar, elles doivent aussi être désignées comme des
endroits où des classes sont disponibles, mais tu verras ça plus
tard :) .
Le commentaire de l'exemple initial semble indiquer que le fichier
contenant le programme est stocké dans un répertoire "genes", c'est
bien ça ?
Est-ce que la commande de lancement est bien exécutée depuis l'intérieur
du répertoire ? Qu'affiche la commande "dir" ?
Pour la compilation, ça devrait ressembler à ça :
javac PremProg.java
Pour le lancement :
java PremProg
Le tout depuis le répertoire contenant le fichier source. Attention,
la compilation peut être lancée depuis l'extérieur de cette manière :
javac genesPremProg.java et va fonctionner, mais pas le lancement de
l'application (java genesPremProg ne va pas fonctionner).
Est-ce que tout le code du fichier se trouve bien dans le message
d'origine ? Il n'y a rien d'autres, pas de déclarations de
paquetages, ... ?
Bonsoir Yliur,
- classpath: compris, pas besoin pour l'instant.
- par facilité, tous les fichiers-exemples se trouvent dans le même répertoire et le raccourci de cmd.exe indique ce même répertoire;
- la commande dir affiche tous les fichiers sources et les .class compilées;
- je compile par javac Premprog.java
et je lance par java PremProg;
- commentaire //genes/... : je pense qu'il indique un répertoire de l'auteur; aucune utilité dans mon cas, sa suppression ne change rien au résultat;
- non, pas d'autres lignes de code, tout est là (c'est un programme pour débutants...);
- je précise que le jdk 1.6.31 est bien paramétré dan la variable d'environnement PATH (ainsi que dans les autres applications qui utilisent java);
En attendant, merci de vos réponses.
Cordialement,
Michel
mimidu74
Désolé, je ne vois pas. A part revérifier les majuscules et minuscules
(l'erreur la plus fréquente sans doute), mais sinon je ne vois pas. Ça
devrait marcher. Et avec un autre exemple dans un autre répertoire, le
problème est le même ?
mimidu74
A tout hasard, essayez quand même avec java -cp . PremProg. en principe
ce n'est pas nécessaire, mais sait-on jamais...
tu ne veux pas nous envoyer un ls ou dir histoire de
remy
--
http://remyaumeunier.chez-alice.fr/
il faut écrire
java PremProg
et pas
java PremProg.java ou java PremProg.class
remy
--
http://remyaumeunier.chez-alice.fr/
Bonjour à tous,
après quelques recherches sur GNT, j'ai trouvé la solution: il me fallait aussi paramétrer la variable ClassPath avec le chemin d'accès au répertoire contenant les fichiers programmes.
Ça marche mieux maintenant! Je vais pouvoir avancer.
Merci à tous ceux qui se sont penchés sur mon problème.
Cordialement,
Michel
mimidu74
Une variable d'environnement ? Ou une option de la cligne de commande ?
Et dans ce deuxième cas, ça ne marchait pas avec "java -cp . PremProg" ?