IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Au lancement par "java nom param", j'obtiens "Erreur : impossible de trouver ou charger la classe principale"


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 30
    Points : 17
    Points
    17
    Par défaut Au lancement par "java nom param", j'obtiens "Erreur : impossible de trouver ou charger la classe principale"
    Bonjour,

    Tout d'abord, je précise que j'ai lu la résolution de ce même problème sur le forum mais cela n'a pas résolu mon cas ... (et ce problème énerve un peu ).

    Je pense avoir tout vérifié (mais forcément non !) et j'ai toujours ce même message d'erreur au lancement.

    - les mêmes fichiers ne posent pas de problème en lançant sous Eclipse mais je veux savoir pourquoi ça bloque avec javac.

    - C'est un projet assez basic (sujet assez compliqué mais petit projet de test)
    - Toutes mes sources sont dans un unique répertoire
    - Il y a 4 import dans le fichier comportant le main
    - le .class a bien été généré.

    où dois-je regarder svp ?? (oscour !)

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    pour commencer il aurait fallu montrer les fichiers et la commande...

    D'ailleurs quand on a problème de ce genre, on commence par regarder ce que ça donne avec un seul fichier.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Merci thelvin pour les suggestions.

    Le code était simple mais j'ai réduit à un seul fichier et voici la situation :

    MonProg.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class MonProg {
     
    public static void main(String[] args) throws Exception {
     
            System.out.println("OK");
        }
    }
    - J'ouvre une fenêtre par cmd.exe et je me place dans le répertoire où se trouve MonProg.java (il n'y a que ce fichier dans le répertoire)
    - Je compile par : javac MonProg.java => aucun message d'erreur et MonProg.class est généré.
    - je lance l'exécution par : java MonProg => message d'erreur : Erreur : impossible de trouver ou charger la classe principale MonProg

    J'utilise Java version 1.8.0_321

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Tu as probablement une variable CLASSPATH définie quelque part dans ton OS, ce qui empêche de lancer les programmes comme ça.

    A la place, il va falloir indiquer que le classpath dans lequel trouver ta classe, c'est le répertoire en cours :

    Code commande shell : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath . MonProg

    ... Ou alors trouver où est définie cette variable CLASSPATH et l'effacer.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Effectivement, j'avais un classpath qui pointait vers une librairie.
    Je l'ai supprimé et maintenant cela fonctionne. Donc, déjà un grand merci !

    Cela m'amène à deux questions :

    1. Je ne comprends pas pourquoi ce classpath est la cause. Le classpath ne sert pas à déclarer une librairie complémentaire au programme que l'on veut exécuter ?

    2. et aussi, je vais avoir besoin de librairie complémentaire qui se trouve ailleurs que le répertoire contenant (la classe contenant) le main. Le classpath ne sert pas à cela ?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par TigreDeau Voir le message
    1. Je ne comprends pas pourquoi ce classpath est la cause. Le classpath ne sert pas à déclarer une librairie complémentaire au programme que l'on veut exécuter ?
    Non. C'est pour le cas où on ne veut pas utiliser le paramètre -classpath (ou l'équivalent raccourci -cp). De manière générale, il est plus ou moins reconnu comme mauvaise idée de se servir de la variable CLASSPATH, et c'est plutôt un reliquat de l'époque où on installait du Java sans qu'il y ait de connaissance sur comment faire.

    Lorsqu'on lance la commande "java" sans fournir aucun classpath, par défaut le classpath c'est le répertoire courant. Mais si on fournit un classpath par la variable CLASSPATH ou par le paramètre -classpath, alors il n'y a bien sûr pas de classpath par défaut. D'où le fait que cette variable CLASSPATH gêne le fonctionnement normal quand on fait des manipulations simples.

    Citation Envoyé par TigreDeau Voir le message
    2. et aussi, je vais avoir besoin de librairie complémentaire qui se trouve ailleurs que le répertoire contenant (la classe contenant) le main. Le classpath ne sert pas à cela ?
    Si, complètement. Il faudra indiquer dans le classpath, le répertoire vers les classes compilées, et les bibliothèques tierces que tu utilises.

    Le classpath indique tous les endroits où chercher les classes dont le programme a besoin.

    A noter que c'est très bien d'apprendre les fondamentaux avec la ligne de commande. Mais une fois qu'on travaille sur de vrais projets, on utilise plutôt NetBeans, Eclipse ou IntelliJ, avec Maven ou gradle en gestion de dépendances, qui s'occupent de nous dédouaner de gérer les choses de la ligne de commande (et bien d'autres.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Merci thelvin pour ces informations.

    Cela progresse mais j’ai maintenant un autre problème :
    - J’ai déposé la librairie dans le même répertoire que le reste du projet
    - J’ai supprimé le Classpath
    - J’ai réouvert une fenêtre cmd et relancé la compilation par javac -cp . etc etc

    Maintenant, j’ai une erreur mentionnant que les packages (déclarés par « import » dans les sources) ne seraient pas dans la librairie (.jar) alors que lorsque je regarde le contenu de cette librairie avec Eclipse, les packages sont bien présents !

    A moins qu’il y ait une raison évidente, je vais continuer avec Eclipse comme tu me l’indiques … pour éviter une cascade de potentiels nouveaux problèmes.

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ah ben, il faut ajouter cette bibliothèque au classpath. C'est ce qu'on venait de dire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par thelvin Voir le message
    il faut ajouter cette bibliothèque au classpath.
    Oui, c'est ce que j'ai fait et mentionné en écrivant : "J’ai réouvert une fenêtre cmd et relancé la compilation par javac -cp . etc etc".

    Je me suis rendu compte que l'écriture avec les '.', c'est à dire "-cp ." ne fonctionne pas ... en tout cas dans mon cas et je n'ai malheureusement pas trouvé de logique au fonctionnement du classpath, ce qui n'est pas très rassurant.

    Par contre (quand même !), la déclaration en variable d'environnement sous la forme "CLASSPATH" => "c:\Répertoire\*" fonctionne bien (voire toujours, mais uniquement avec "*", pas avec *.jar par exemple !), ainsi que la déclaration des librairies une par une dans cette même variable d'environnement.

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    .....

    Mais enfin c'est pas de l'alchimie.

    Ce qui marche avec la variable CLASSPATH, ça marche aussi tout pareil avec le paramètre -cp voyons. Il suffisait de faire la même chose.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Mais enfin c'est pas de l'alchimie.
    ??

    Citation Envoyé par thelvin Voir le message
    Ce qui marche avec la variable CLASSPATH, ça marche aussi tout pareil avec le paramètre -cp voyons. Il suffisait de faire la même chose.
    Ce n'est pas la distinction entre argument et variable d'environnement que je fais (en plus je ne l'affirmerais pas car l'analyseur syntaxique n'est pas forcément le même à 100% dans les deux cas !, oui peut-être ...).

    J'écris juste que la formulation de l'argument "-cp ." qui m'a été indiquée au début de cette discussion ne fonctionne pas. Rien de plus.

    Cela peut servir à d'autres de le savoir

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/10/2015, 17h32
  2. Réponses: 0
    Dernier message: 26/11/2014, 17h41
  3. Valeur par défaut du nom d'utilisateur.
    Par frederic.go dans le forum Access
    Réponses: 2
    Dernier message: 19/10/2005, 15h04
  4. Tri par Codes Postaux + Noms d'entreprises
    Par matperino dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/07/2005, 14h04
  5. [MAC] Lancement d'appli java
    Par zakir dans le forum Général Java
    Réponses: 3
    Dernier message: 15/03/2005, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo