web-dev-qa-db-fra.com

exception dans le fil 'principal' Java.lang.NoClassDefFoundError:

Le programme suivant génère une erreur:

public class HelloWorld {
    public static void main(String args[]) {
        System.out.println("Hello World!"); 
    }
}

CLASSPATH C:\Program Files\Java\jdk1.6.0_18\bin\

Path C:\Program Files\Java\jdk1.6.0_18\bin\

JAVAHOME C:\Program Files\Java\jdk1.6.0_18\bin

Pouvez-vous s'il vous plaît me dire la cause racine?

47
Haritha

J'ai trouvé une autre raison commune. Si vous créez le fichier Java dans un paquet utilisant IDE comme Eclipse, vous trouverez le nom du paquet en haut de votre Java fichier du type "package pkgName". Si vous essayez d'exécuter ce fichier à partir de la commande Invite, vous obtiendrez l'erreur NoClassDefFoundError. Supprimez le nom du package du fichier Java) et utilisez les commandes qu'il contient ". l'invite de commande a gaspillé 3 heures pour cela - Abhi

66
Abhi
Exception in thread "main" Java.lang.NoClassDefFoundError  

Un des emplacements Java essaie de trouver votre fichier .class Est votre répertoire actuel. Donc, si votre fichier .class Est dans C:\Java, Vous devrait changer votre répertoire actuel à cela.

Pour changer votre répertoire, tapez la commande suivante à l'invite et appuyez sur Entrée:

cd c:\Java  

Ce . Indique à Java que votre chemin d'accès aux classes est votre répertoire local.

Executing your program using this command should correct the problem:
Java -classpath . HelloWorld  
27
sgokhales

Si votre paquet est helloworld, vous iriez dans le répertoire parent de votre paquet puis exécutez:

Java helloworld.HelloWorld
14
hadibou

Exécutez-le comme ceci:

Java -jar HelloWorld.jar
11

Voir http://scottizu.wordpress.com/2013/08/28/fixing-the-exception-in-thread-main-Java-lang-noclassdeffounderror-in-Eclipse/ .

C’est la forme longue des commandes Java qui peuvent être exécutées à partir d’une invite de commande Windows:

"C:\Program Files\Java\jdk1.6.0_18\bin\javac.exe" -classpath "C:\Users\Scott\workspace\myproject" com\mycompany\myapp\HelloWorld.Java
"C:\Program Files\Java\jdk1.6.0_18\bin\Java.exe" -classpath "C:\Users\Scott\workspace\myproject" com.mycompany.myapp.HelloWorld
  1. Ces commandes peuvent être exécutées à partir de n’importe quel répertoire, ce qui vous évite d’être dans le répertoire où se trouve votre fichier HelloWorld.Java.
  2. La première ligne compile votre fichier HelloWorld.Java en créant un fichier HelloWorld.class.
  3. La deuxième ligne exécute le fichier HelloWorld.class.
  4. Le -classpath indique Java où chercher le fichier spécifié dans chaque commande
  5. Le compilateur Java (javac.exe) s'attend à l'emplacement du fichier Java, par rapport au chemin de classe (le fichier se trouve à l'emplacement C:\Users\Scott\workspace\myproject\com\mycompany\myapp\HelloWorld.Java)
  6. Java (Java.exe) attend le package (c'est-à-dire, com.mycompany.myapp) et la classe (HelloWorld), par rapport au chemin de la classe (c'est-à-dire que le fichier se trouve dans C:\Utilisateurs\Scott\espace de travail\myproject\com\mycompany\myapp\HelloWorld.class)

Notez que le classpath n'a pas de barre oblique à la fin. Les commandes javac.exe attendent que le fichier se termine par ".Java". La commande Java.exe attend le nom complet de la classe et ne se termine pas par ".class".

Il y a plusieurs façons de simplifier ces commandes:

  1. Vous n'avez pas à spécifier le chemin d'accès complet à Java.exe. Ajoutez Java au chemin Windows (Exécuter-> sysdm.cpl-> Onglet Avancé-> Variables d'environnement-> Sélectionner un chemin-> Modifier-> Ajouter "; C:\Program Files\Java\jdk1.6.0_18\bin\"). Ou vous pouvez ajouter Java_HOME et créer cette variable d’environnement.
  2. Vous n'êtes pas obligé d'entrer le classpath entier (vous pouvez simplement utiliser -classpath "."). Entrez le répertoire dans lequel vous travaillerez:

    cd "C:\Utilisateurs\Scott\Espace de travail\Mon projet \"

  3. Vous pouvez utiliser le package par défaut (placez le répertoire du fichier HelloWorld.Java dans votre répertoire de travail et n'utilisez pas la directive Java)

Si vous apportez ces modifications, vous exécuterez quelque chose comme ceci (et vous pourrez peut-être laisser out -classpath "."):

cd "C:\Users\Scott\workspace\myproject\"
javac -classpath "." HelloWorld.Java
java -classpath "." HelloWorld
5
Scott Izu

Voici ce qui a finalement fonctionné.

`@echo off
set path=%path%;C:\Program Files\Java\jdk1.7.0_71\bin;
set classpath=C:\Program Files\Java\jdk1.7.0_71\lib;
cd <packageDirectoryName>
javac .\trainingPackage\HelloWorld.Java
cd ..
Java trainingPackage.HelloWorld 
REM (Make sure you are on the parent directory of the PackageName and not inside the    Packagedirectory when executing Java).`
4
ravikanth

Le javadoc de NoClassDefFounError lui-même serait un bon début ( here) , puis je vous suggérerai de nettoyer et de reconstruire votre projet.

3
talnicolas

J'ai eu le même problème et suis tombé sur une solution avec 'Build Main Project F11'. L'ide a présenté une "option" que je pourrais désélectionner "Compiler à l'enregistrement" dans la partie Construction> Compilation de la boîte de dialogue de configuration du projet. Décocher 'Complile on Save', puis faire comme d'habitude (pour moi) 'Nettoyer et construire' a fait l'affaire pour moi.

1
user2676860

tapez ce qui suit dans l'invite cmd, dans votre dossier:

set classpath=%classpath%;.;
1
Bruevin

Fichier Java:

package com.beans;

public class Flower{
 .......
}

packages :=> com.beans,
Java class Name:=> Flower.Java,
Folder structure (assuming):=> C:\com\beans\Flower.*(both .Java/.class exist here)

alors il y a deux façons de l'exécuter:

1. Goto top Folder (here its C:\>),
     then : C:> Java com.beans.Flower 
2. Executing from innermost folder "beans" here (C:\com\beans:>),
     then: C:\com\beans:> Java -cp ./../.. com.beans.Flower
1
Udit Nagi

Avait le même problème essayé ci-dessus des solutions mais aucune n'a fonctionné. Je devais passer par mon Java seulement pour constater que la fonction principale ne pouvait pas être reconnue car il n'y avait pas d'espace entre lui et (String), c'est-à-dire le code initial:

public static void main(String[]args){

code de travail.

public static void main (String[]args){

J'espère que j'ai aidé quelqu'un.

1
domii

Votre CLASSPATH doit également connaître l'emplacement de votre classe HelloWorld.

En termes simples, vous devriez ajouter le point . (signifie répertoire courant) dans les commandes CLASSPATH si vous exécutez les commandes javac et Java à partir de l’invite du DOS.

1
anubhava

La variable CLASSPATH doit inclure le répertoire dans lequel se trouve votre fichier .class Java). Vous pouvez inclure '.' Dans CLASSPATH pour indiquer que le répertoire en cours devrait être inclus.

set CLASSPATH=%CLASSPATH%;.
1
Amir Afghani

si votre Program.Java est dans le répertoire "src/mypkg/subpkg /":

aller à "src" dir

Ensuite, pour compiler, utilisez "javac mypkg/subpkg/Program.Java"

Pour exécuter, utilisez "Java mypkg.subpkg.Program.class"

0
mar915h

Essayer de faire

javac Hello.Java

et ensuite, s'il ne présente aucune erreur de compilation (ce qui ne devrait pas être fait car je ne vois aucun bogue dans votre programme), tapez

Java Hello

0
DalekCaan99

Le problème ici est la configuration de l'environnement et l'exécution du fichier de classe. une. Pour définir le chemin de l'environnement, exécutez la commande suivante: set path = C:\Program Files (x86)\Java\jdk1.7.0\bin b. lancez le programme à partir du paquet tel que com.test.TestJavaClass

Commande: Java com.test.TestJavaClass

Le problème général ici est que nous l’exécutons à partir du paquet tel que src/package/name. Nous ne devrions pas inclure src, le nom du paquet suffit.

0
Chirag Pahuja

Solution simple et rapide: J'ai résolu ce problème (NetBeans) par exportation le projet original dans un fichier Zip, supprimer le répertoire du projet d'origine et importer le projet à partir du fichier Zip.

0
Pavel Vavruska

J'ai eu ce proplem j'ai utilisé Maven. Je viens de cliquer sur les projets maven ant puis nom

project-> plugins -> clean -> and button run.

enter image description here

0
Peter Petrov

Si vous voulez "compiler et exécuter" tout fichier Java que vous avez créé à l'aide de n'importe quel IDE (comme Eclipse), exécutez simplement les commandes ci-dessous:

Compile:javac Users\dhiraj01\workspace\Practice\src\PracticeLogic\Logics.Java

Execute:Java -classpath Users\dhiraj01\workspace\Practice\src\ PracticeLogic.Logics

0
Dhiraj Aggarwal

J'ai eu cette erreur parce que mes fichiers étaient contenus dans un package. Donc, mon paquet foo je devais appeler comme:

Java foo.HelloWorld

0
kravits88

J'ai passé quatre heures à essayer diverses permutations et suggestions de recherche.

Enfin, trouvé ce poste qui a fonctionné, mais pas la meilleure solution pour changer le code original pour le tester.

  1. J'ai essayé de changer CLASSPATH pour inclure les bibliothèques de classes, set classpath=JDKbin;JDKlib;JREbin;JRElib;myClassLib;.
  2. Changé le répertoire actuel en répertoire parent (dossier du paquet) et fatigué Java <packageName>.<className> A également essayé le Java ..\<packageName>.<className>

Ni travaillé.

Cependant, seule la première réponse a fonctionné. Merci beaucoup Abhi !!!

"J'ai trouvé une autre raison commune. Si vous créez le fichier Java dans un package en utilisant IDE comme Eclipse, vous trouverez le nom du package en haut de votre fichier Java tel que" package pkgName ". Si vous essayez d’exécuter ce fichier à partir de la commande Invite, vous obtiendrez l’erreur NoClassDefFoundError. Supprimez le nom du package du fichier Java et utilisez les commandes de la commande Invite. Gâché 3 heures pour cela. - Abhi "

Curieux de savoir s'il existe un autre moyen de le faire fonctionner sans avoir à changer le code d'origine? Je vous remercie!

0
ravikanth

J'ai finalement trouvé ceci comme un bug avec l'éditeur Apache Netbeans:

Les étapes ci-dessous vont supprimer l'erreur:

  1. Renommez le nom de fichier et la classe en Abc
  2. Fermer l'éditeur
  3. Rouvrir l'éditeur
  4. Renommez le nom de fichier et la classe, à partir de Abc, en revenant au nom précédent.
  5. Maintenant, le projet de débogage (Ctrl + F5) fonctionne bien

J'espère que cela vous aidera si vous utilisez le nouvel Apache Netbeans (pas l'ancien Netbeans)

0