Partage
  • Partager sur Facebook
  • Partager sur Twitter

"Impossible de trouver ou de charger la classe principale"

Sujet résolu
20 août 2012 à 19:14:56

Bonjour,

le problème paraît tout simple, mais ça fait quelques heures que je me casse la tête dessus :colere:

J'ai ce fichier Main.java:

public class Main
{
	public static void main(String[] args)
	{
		System.out.println("ok");
	}
}


En ligne de commande, sous le même répertoire que le fichier, j'écris:

javac Main.java
java Main


Lors de la compilation, tout marche parfaitement, mais lors de l'éxécution, cette erreur s'affiche:


Erreur: impossible de trouver ou de charger la classe principale Main.class


Merci de vos réponses :)
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2012 à 20:32:29

vérifie que dans le même dossier un fichier Main.class existe bien, vérifie aussi que le dossier courant ou tu lances l'exécution de ton programme est bien le même que celui où se trouve ce dit fichier, sinon essaye avec un autre nom que Main je ne sais pas si ça joue mais je trouve le nom de la classe bizzare :p et sinon je ne vois pas ^^'
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2012 à 20:38:56

Tout se compile bien dans le même repertoire, et j'ai essayé avec un autre nom de classe :(
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2012 à 22:13:21

tu travailles sous linux ? windows ? avec quel logiciel de développement ? c'est bizzare cette histoire :o
  • Partager sur Facebook
  • Partager sur Twitter
21 août 2012 à 15:16:21

Je travaille sous Windows

J'ai essayé de compiler avec eclipse, puis après en ligne de commande voir si le problème venait de l'IDE. Apparement pas, puisque ça ne marche dans aucun des cas...

@iffrit oui ça à l'air d'être le même problème, je vais y jeter un coup d'oeil :)

Edit: ce n'est pas un problème de package, j'avais laissé celui par default (aucun).
Et même avec un package définit, ça ne marche pas...
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2012 à 22:28:35

Je relance le sujet car je suis dans le même cas (avec windows7).

Le JDK est installé, les PATH sont bon, je met une toute petite class "HelloWorld" pour tester si tout fonctionne bien et là BAM, ça compile mais lorsque je veux executer : impossible de trouver ou de charger la classe principale HelloWorld.class

J'ai essayé dans d'autres dossier, avec d'autres fichiers, en renommant, ect... et rien n'y fait.

Je ne vois pas du tout d'où ça peux venir.
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2012 à 19:31:12

J'ai l'impression que le problème venait de l'accès aux fichiers.
L'erreur a disparue depuis, essaye le logiciel Unlocker pour voir si tes répertoires concernés ont un problème ;)
  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2014 à 1:44:04

Même problème dans l'invité de commande.

J'ai paramétré la variable d'environnement Path (bien, je l'espère).

Le fichier .class est généré sans problème en appelant javac avec mon fichier .java (ce qui confirme que path est paramétré comme il faut je suppose ?).

Mais quand je fais java <nomdufichier sans l'extension> j'ai le message "erreur : impossible de trouver ou charger la classe principale".

Aucun problème en revanche dans éclipse (mais qui visiblement utilise javaw au lieu de java ?!).

Quelqu'un aurai il une idée ?

Supra-Moulinex, pourrai tu développer l'histoire des répertoires stp ?

  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2014 à 16:18:34

Bonjour à tous,

Débutant en programmation de java, je constate le même problème que Messiah. Je suis certain de mon PATH. Sous Eclipse tout se passe bien. Le problème vient à l'exécution. Je suis aussi, bien positionné dans le même répertoire. Le fichier .class existe bien.

Je suis sous Windows 8.1 et je m'aide de l'ouvrage de Cyrille Herby que j'ai sous les yeux. J'ai la dernière version de JDK.

Merci pour votre aide !

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
5 juin 2014 à 13:08:28

Bonjour,

j'ai aussi exactement le même problème. La compilation se passe très bien sous l'invite de commande, le .class est généré mais si je tape "java test1" le message "impossible de trouver ou charger la classe principale test1".

Sous Eclipse tout se passe bien.

La seule chose que je note c'est que sous Eclipse le .class est compilé dans projet1/bin/projet1 alors que sous invité de commande il est compilé dans le même dossier que le .java, à savoir dans projet1/src/projet1

Merci pour votre aide

  • Partager sur Facebook
  • Partager sur Twitter
7 juin 2014 à 17:55:49

Salut

Si comme moi vous suivez le cours java, il vous faut sans doute retirer la ligne "package XXX;" au début du fichier java. Le lien donné par iffrit indiquait tout ce qu'il y a à savoir :)

  • Partager sur Facebook
  • Partager sur Twitter
Tout problème ayant sa solution, s'il n'y a pas de solution c'est qu'il n'y a pas de problème
Anonyme
7 juin 2014 à 20:57:28

Salut

En effet en ce qui me concerne je suis le cours Java. Je vais essayer ça alors. J'avais déjà regardé le lien qu'Iffrit a posé mais je n'avais pas compris ça. J'ai essayé tout ce que j'ai pu trouver sur Google mais rien n'a fonctionné.

Je posterai/éditerai quand j'aurai essayé ça.

Merci de ta réponse denokan !

Bonne soirée/journée !

  • Partager sur Facebook
  • Partager sur Twitter
8 juin 2014 à 1:44:40

Dans mon cas ça ne fonctionne malheureusement pas...
  • Partager sur Facebook
  • Partager sur Twitter
8 juin 2014 à 10:45:02

Messiah tu peux coller ton code source complet stp ?
  • Partager sur Facebook
  • Partager sur Twitter
Tout problème ayant sa solution, s'il n'y a pas de solution c'est qu'il n'y a pas de problème
8 juin 2014 à 23:43:59

En fait ta classe est placée par défaut dans un package

Prenons les hypothèses suivantes : 

1) Vous avez créé un projet java appelé "projet1" 

=> Eclipse vous créé donc à ce moment là un dossier bin et src +2 fichiers (.classpath et .project) dans le dossier projet1/sdz1

2) Vous avez ensuite créé une classe appelée "sdz1" dans ce projet.

=> Eclipse vous créé automatiquement votre classe en la mettant dans un "package" car il est conseillé de faire comme ça.

=> C'est pour ça que dans le dossier "src" vous n'avez pas directement votre classe mais que vous avez à nouveau un dossier nommé "projet1" qui correspond au package.

Comment compiler et exécuter en ligne de commande : 

En partant de ce constant quand vous enregistrez votre classe Hello world elle se trouve donc dans un package d'où la ligne en haut de votre code qui indique : package projet1;

Pour compiler en ligne de commande il vous faut, (une fois la variable PATH configurée) aller dans le dossier qui contient la classe

=> Chez moi par exemple je me place ici : "C:\Users\Arnaud_2\workspace\projet1\src\projet1"
=> Si je tape la commande "dir" dans ce dossier je peux voir mon fichier sdz1.java

Répertoire de C:\Users\Arnaud_2\workspace\projet1\src\projet1

08/06/2014  23:45    <DIR>          .
08/06/2014  23:45    <DIR>          ..
08/06/2014  23:09               201 sdz1.java
               1 fichier(s)              201 octets
               2 Rép(s)  102 751 244 288 octets libres

Je compile en tapant la commande "javac sdz1.java" 

Dans mon cas voici ce qui s'affiche dans mon cmd :

C:\Users\Arnaud_2\workspace\projet1\src\projet1>javac sdz1.java

Si vous essayez ensuite de lancer votre programme à partir du même dossier ça ne marchera pas car vous êtes dans un package.
Pour que l’exécution marche vous devez remonter d'un niveau dans l'arborescence en tapant "cd.."

Dans mon cas je me retrouve ici :  C:\Users\Arnaud_2\workspace\projet1\src\
C'est à partir de ce dossier "src" que je vais exécuter mon programme en lui indiquant dans quel package se trouve mon fichier sdz1.class (fichier compilé)

J'exécute en tapant la commande "java projet1/sdz1" (on n'indique pas le .class à la fin du fichier)

Dans mon cas voici ce qui s'affiche sur mon cmd :

C:\Users\Arnaud_2\workspace\projet1\src>java projet1/sdz1
Hello World !
My name is
Arnaud


Voila :)

-
Edité par Sijuvabien 8 juin 2014 à 23:49:39

  • Partager sur Facebook
  • Partager sur Twitter
9 juin 2014 à 0:17:22

Merci pour ta réponse très complète Sijuvabien !

Malheureusement c'est ce que je fais et ça ne fonctionne pas.

Le code de ma classe :

package projet1;

public class sdz1 {

	public static void main(String[] args) {
		System.out.print("Hello World ! \n");// \n = retour à la ligne
		System.out.println("My name is");//println = chaine passée en paramètre + \n
		System.out.println("\nPIMPIMPIM");

		byte un;
		un=127;//-128 à 127
		short deux;
		deux=32767;//-32768 à 32767
		int quatre;
		quatre=156000000;//9 chiffres
		long huit;
		huit=9999999999999L;//Obligé le L !!!
		float quatre2;
		quatre2=3.141592653f;//Obligé le f !!!
		double huit2;
		huit2=0.666666666666666d;//Obligé le d
		char caractere;
		caractere='M';
		boolean verite;
		verite=true;
		String enDentelle = new String("Salut toi");//Objet
		
		int i=10, j=3;
		double resultat;

		resultat = i/j;//On divise 2 int : = un entier
		System.out.println(resultat);

		resultat = (double)(i/j);//On divise 2 int : = un entier. Qu'on converti en double : mais c'est trop tard
		System.out.println(resultat);

		resultat = (double)(i)/(double)(j);//On converti les 2 nombre en double. On divise 2 double et donc c'est bon !
		System.out.println(resultat);
		
		String chaine = new String();
		int nombre=1;
		chaine=chaine.valueOf(nombre);//On a la valeur du nombre dans la chaine : ca donnera "1"
		nombre=Integer.valueOf(chaine).intValue();
		
		System.out.println(chaine + "\n" + nombre);
		
		long entier=1_000_000_000;//On peut mettre des _ pour mieux se repérer ca ne dérange pas
		entier=1______5__23___2;//Peut importe où ou combien parait il. MAIS marche pas au début et à la fin en pratique
		entier=255;//Décimal
		entier=0xFF;//Hexadécimal grace à 0x
		entier=0b1111_1111;//Binaire grace à 0b
	}

}

Je lance la ligne de commande suivant :

C:\Users\Matthieu\OneDrive\Documents\Projet JAVA\Partie 1\projet1\src>java projet1.sdz1

(J'ai essayé ceci avec le . ou avec le / ou meme avec le \)

Sachant que mon dossier se présente ainsi :

Je lance donc la console un dossier avant.

Voilà je pense que j'ai dis tout ce que je pouvais dire :p.

Merci pour votre aide

-
Edité par Messiah 9 juin 2014 à 0:19:47

  • Partager sur Facebook
  • Partager sur Twitter
10 juin 2014 à 22:30:59

je répète qu'il suffit de retirer la ligne package XXXX;

ensuite tu lances : 

javac sdz1.java

 qui va créer le fichier sdz1.class, puis

java sdz1


et ça fonctionne correctement

  • Partager sur Facebook
  • Partager sur Twitter
Tout problème ayant sa solution, s'il n'y a pas de solution c'est qu'il n'y a pas de problème
10 juin 2014 à 22:51:30

Et quand il devra compiler une application avec plusieurs packages ? Non, il faut savoir compiler une classe dans un package c'est pas comme si c'était insurmontable. Il suffit de se placer au-dessus du package, de faire javac nomDuPackage/nomDeLaClasse.java puis java nomDuPackage.nomDeLaClasse pour exécuter.

-
Edité par Dici 10 juin 2014 à 22:54:24

  • Partager sur Facebook
  • Partager sur Twitter
12 juin 2014 à 12:11:43

J'ai essayé de supprimer "package XXXX" et lancer java sdz1 dans le dossier projet1.

J'ai essayé, avec package, de lancer java projet1.sdz1 dans le dossier src (à l'extérieur de projet1 donc).

Rien ne fonctionne.

  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2014 à 21:07:53

Bonjour,

Je suis confronté au même problème que vous, cependant je suis sous linux, je me sers de Vim avec le plugin Eclim - qui se base sur Eclipse - et par contre, contrairement à vous lorsque je compile en ligne de commande il n'y a aucun problème... C'est très étrange... Est-ce que vous savez ce qui pourrait être responsable de cela? C'est très embêtant et contre-productif de plus...

Merci d'avance pour vos réponses

  • Partager sur Facebook
  • Partager sur Twitter
15 juin 2014 à 23:12:04

Nous non plus nous n'avons pas de problème lors de la compilation.
  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2014 à 11:44:20

Et pour information, j'ai essayé d'installer une bibliothèque, rxtx, quelque heures avant que ça ne marche plus. Et la bibliothèque ne marche pas du tout, étant désormais introuvable j'ai dû aller la chercher sur un site non officiel... Donc peut-être que vous avez aussi faut ça avant moi, ou seulement été dans les fichiers d'éclipse, ou du jdk.

-
Edité par Spirine 16 juin 2014 à 11:45:09

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2014 à 12:08:59

Pour utiliser une librairie il faut l'avoir ajoutée dans le CLASSPATH. Soit tu le configures sous ton IDE soit il faut le faire à la main avec un export (en bas, sinon réfère toi à la doc du Shell que tu utilises).
  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2014 à 14:19:03

Je sais Dici, mais merci quand même, seulement cette bibliothèque avait bien était installée, le classpath mis à jour, mais les .so ne marchaient pas et n'était pas de la même version que le jar donc c'est problématique...

Edit: Ne voulant pas trop me prendre la tête à trouver l'origine du problème, j’ai simplement désinstallé puis réinstallé le JDK, et... miracle ça marche à nouveau! Il n'y a plus de problème avec Eclipse!

-
Edité par Spirine 16 juin 2014 à 16:50:33

  • Partager sur Facebook
  • Partager sur Twitter
3 juillet 2014 à 14:47:55

Un grand merci à Sijuvabien, j'avais le même problème.

Si j'exécute à partir de mon dossier package erreur class introuvable.

Schema:

package test

class toto

c:/javalearningproject/test> java toto => erreur class introuvable

c:/javalearningproject> java test.toto => ça fonctionne

  • Partager sur Facebook
  • Partager sur Twitter
20 août 2014 à 23:23:02

J’ai eu moi aussi le même problème mais il m’a suffit de supprimer la variable d’environnement CLASSPATH apparemment si tu la défini  java va chercher le fichier.class dans le chemin défini par sa valeur et non dans le dossier que tu te trouves.

  • Partager sur Facebook
  • Partager sur Twitter
4 septembre 2014 à 0:09:24

Mon problème venait bien de là. MERCI
  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2014 à 1:35:52

 à Sijuvabien .MERCI beaucoup pour ton aide donné le 8juin 2014 à 23:43:59 

ça marche!

2 heures que je galérait... j'y serai encore sans ton aide

  • Partager sur Facebook
  • Partager sur Twitter