uitzondering in thread ‘main’ java.lang.NoClassDefFoundError:

Het volgende programma geeft een fout:

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

Kun je me de hoofdoorzaak vertellen?


Antwoord 1, autoriteit 100%

Ik heb een gemeenschappelijke reden voor elkaar gevonden. Als u het java-bestand in een pakket maakt met IDE zoals eclipse, vindt u de pakketnaam bovenaan uw java-bestand, zoals “package pkgName”. Als u dit bestand probeert uit te voeren vanaf de opdrachtprompt, krijgt u de NoClassDefFoundError-fout. Verwijder de pakketnaam uit het java-bestand en gebruik de opdrachten in de opdrachtprompt. Was hier 3 uur mee bezig. — Abhi


Antwoord 2, autoriteit 41%

Exception in thread "main" java.lang.NoClassDefFoundError  

Een van de plaatsen waar Java uw .class-bestand probeert te vinden, is uw huidige map. Dus als uw .class-bestand zich in C:\javabevindt, moet u uw huidige directory daarin wijzigen.

Als u uw directory wilt wijzigen, typt u de volgende opdracht bij de prompt en drukt u op Enter:

cd c:\java  

Deze .vertelt java dat je klassenpad je lokale map is.

Executing your program using this command should correct the problem:
java -classpath . HelloWorld  

Antwoord 3, autoriteit 22%

Als uw pakket HelloWorldis, zou u naar Parent DIRE van uw pakket gaan en vervolgens uitvoeren:

java helloworld.HelloWorld

Antwoord 4, Autoriteit 18%

Voer het uit als volgt:

java -jar HelloWorld.jar

Antwoord 5, Autoriteit 7%

Zie http://scottizu.wordpress.com/2013/08/28/Fixing-the-exception-in-thread-main-java-lang-noclassdeffoundrror-in-Eclipse/ .

Dit is de lange vorm van de Java-opdrachten die kunnen worden uitgevoerd vanaf een Windows-opdrachtprompt:

"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. Deze opdrachten kunnen worden uitgevoerd vanuit elke map, wat betekent dat u niet in de map hoeft te staan ​​waar uw HLOOGORLD.JAVA-bestand is.
  2. De eerste regel compileert uw HLELLDORD.JAVA-bestand, waardoor een HLELLDORLD.CLASS-bestand maakt.
  3. De tweede regel voert het HLELLOWORLD.CLASS-bestand.
  4. Het -classpath vertelt Java waar u op zoek bent naar het opgegeven bestand in elke opdracht
  5. De Java Compiler (Javac.exe) verwacht de locatie van het Java-bestand, ten opzichte van het ClassPath (dwz het bestand bevindt zich op C: \ -gebruikers \ Scott \ Workspace \ MyProject \ Com \ MyCompany \ MyApp \ Helloworld.java )
  6. JAVA (JAVA.EXE) verwacht het pakket (dwz com.mycompany.myApp) en klasse (helloworld), ten opzichte van het klassenpad (dwz het bestand bevindt zich op C: \ gebruikers \ Scott \ Workspace \ myproject \ com \ mycompany \ myapp \ helloworld.class)

Let op het ClassPath heeft aan het einde geen schuine streep. De opdrachten van Javac.exe worden verwacht dat het bestand eindigt met “.java”. De opdracht Java.exe verwacht de naam van de volledige klas en eindigt niet met “.class”.

Er zijn een paar manieren om deze opdrachten te vereenvoudigen:

  1. U hoeft niet het volledige pad naar Java.exe te specificeren. Voeg Java naar de Windows Path (Run- & gt; sysdm.cpl- & gt; Uitgebreid Tab- & gt; Milieu Variables- & gt; Select Path- & gt; Bewerken & gt; Append “; C: \ Program Files \ Java \ jdk1.6.0 _18 \ bin \ “). Of u kunt Java_Home toevoegen en die omgeving variabele maken.
  2. U hoeft niet het hele klassenpad (dwz te betreden, u kunt gewoon -classpath “.”). Voer de map in waar u in wilt werken:

    cd “C: \ Users \ Scott \ workspace \ myproject \”

  3. U kunt het standaardpakket gebruiken (zet de bestandshelloworld.java-bestandsdirectory in uw werkdirectory en gebruik de richtlijn JAVA PAKKET niet)

Als u deze wijzigingen aanbrengt, zou u zoiets als dit uitvoeren (en u kunt mogelijk – Classpath “.”):

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

Antwoord 6, Autoriteit 6%

Hier is wat eindelijk gewerkt.

`@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).`

Antwoord 7, autoriteit 4%

De javadoc van NoClassDefFounError zelf zou een goed begin zijn (hier), en dan raad ik je aan om je project op te schonen en opnieuw op te bouwen.


Antwoord 8

De variabele CLASSPATHmoet de directory bevatten waar het .class-bestand van uw Java-programma’s zich bevindt. U kunt ‘.’ in CLASSPATHom aan te geven dat de huidige map moet worden opgenomen.

set CLASSPATH=%CLASSPATH%;.

Antwoord 9

Je CLASSPATHmoet ook de locatie van je HelloWorld-les weten.

In eenvoudige bewoordingen moet u punt .(betekent huidige map) in het CLASSPATHals u javacen javacommando’s vanaf de DOS-prompt.


Antwoord 10

Ik had hetzelfde probleem en stuitte op een oplossing met ‘Build Main Project F11’.
De ide bracht een “optie” naar voren die ik misschien wil uitschakelen voor ‘Compile on Save’
in de Build > Compilatiegedeelte van het dialoogvenster Projectconfiguratie.
Het uitvinken van ‘Complile on Save’ en vervolgens de gebruikelijke (voor mij) ‘Clean and Build’ deed de truc voor mij.


Antwoord 11

typ het volgende in de cmd-prompt, in uw map:

set classpath=%classpath%;.;

Antwoord 12

Heb hetzelfde probleem gehad, bovenstaande oplossingen geprobeerd, maar geen enkele werkte.
Ik moest alleen door mijn Java-code gaan om te ontdekken dat de hoofdfunctie niet kon worden herkend omdat er geen spatie was en (String)
dwz initiële code:

public static void main(String[]args){

werkende code.

public static void main (String[]args){

Ik hoop dat ik iemand heb geholpen.


Antwoord 13

Java-bestand:

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)

dan zijn er twee manieren om het uit te voeren:

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

Antwoord 14

Ik kreeg deze fout omdat ik mijn bestanden in een pakket had.
Dus mijn foo-pakket moest ik bellen als:

java foo.HelloWorld


Antwoord 15

Het probleem hier is het instellen van de omgeving en het uitvoeren van het klassenbestand.
A. Voer de volgende opdracht uit om het omgevingspad in te stellen:
set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
B. voer het programma uit vanuit het pakket zoals com.test.TestJavaClass

Opdracht: java com.test.TestJavaClass

Het algemene probleem hier is dat we het ofwel vanuit het pakket uitvoeren, zoals src/package/name.
We mogen geen src opnemen, de pakketnaam is voldoende.


Antwoord 16

Eenvoudig & Eenvoudige oplossing:ik heb dit probleem opgelost (NetBeans) door exporterenhet originele project in zip-bestand, verwijderende originele projectdirectory en importerenhet project terug uit het zip-bestand.


Antwoord 17

Probeer het te doen

javac Hello.java

en dan, als er geen compilerfouten worden gevonden (wat het niet zou moeten doen omdat ik geen bugs in je programma kan zien), typ dan

java Hello


Antwoord 18

Als je een java-bestand wilt ‘compileren en uitvoeren’ dat je hebt gemaakt met een IDE (zoals eclipse), voer je gewoon de onderstaande opdrachten uit:

Compileren:
javac Users\dhiraj01\workspace\Practice\src\PracticeLogic\Logics.java

Voer uit:java -classpath Users\dhiraj01\workspace\Practice\src\ PracticeLogic.Logics


Antwoord 19

Ik heb vier uur besteed aan het uitproberen van verschillende permutaties & zoeksuggesties.

Eindelijk dit bericht gevonden dat werkte, maar niet de beste oplossing om de originele code te wijzigen om het te testen.

  1. Geprobeerd CLASSPATH te wijzigen, om klassenbibliotheken op te nemen, set classpath=JDKbin;JDKlib;JREbin;JRElib;myClassLib;.
  2. De huidige map gewijzigd in bovenliggende map (pakketmap) en moe java <packageName>.<className>probeerde ook de java ..\<packageName>.<className>

Geen van beide werkte.

Eerste reactie alleen werkte echter. Heel erg bedankt Abhi!!!

“Ik heb een andere veelvoorkomende reden gevonden. Als u het java-bestand in een pakket maakt met IDE zoals eclipse, vindt u de pakketnaam bovenaan uw java-bestand, zoals “pakket pkgName”. Als u dit probeert uit te voeren bestand vanaf de opdrachtprompt, krijgt u de NoClassDefFoundError-fout. Verwijder de pakketnaam uit het java-bestand en gebruik de opdrachten in de opdrachtprompt. Verspilde 3 uur hiervoor. — Abhi”

Benieuwd of er een andere manier is om het te laten werken zonder de originele code te wijzigen? Bedankt!


Antwoord 20

als uw Program.java in de map “src/mypkg/subpkg/” staat:

ga naar “src” dir

Gebruik dan om te compileren “javac mypkg/subpkg/Program.java”

Gebruik “java mypkg.subpkg.Program.class” om uit te voeren


Antwoord 21

Eindelijk vond ik dit als een bug in de Apache Netbeans-editor:

De onderstaande stappen zullen de fout verwijderen:

  1. Hernoem de bestandsnaam & klasse naar Abc
  2. Sluit de editor
  3. Open de editor opnieuw
  4. Hernoem de bestandsnaam & class, van Abc, terug naar de vorige naam
  5. Debug project (Ctrl+F5) werkt nu prima

Ik hoop dat dat helpt, als je nieuwe Apache Netbeans gebruikt (geen oude Netbeans)


Antwoord 22

Ik had dit probleem dat ik maven gebruikte. Ik klik gewoon op maven projects mier en vervolgens op naam

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


Antwoord 23

Je kunt informatie over vereiste bibliotheken vinden in pom.xml, het is veel gemakkelijker om tools zoals Apache Maven te gebruiken om Java-applicaties te bouwen.

   <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.20</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.7</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-math3</artifactId>
        <version>3.6.1</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>24.0-jre</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.inject.extensions</groupId>
        <artifactId>guice-assistedinject</artifactId>
        <version>4.2.0</version>
    </dependency>

Antwoord 24

Voeg de jar toe aan je klassenpad.

Als u bijvoorbeeld NoClassDefFoundErrorvoor klasse XXXXXXhebt, haalt u de jar met de klasse op en voegt u deze handmatig toe aan uw klassenpad.

Het werkt voor mij. Hopelijk werkt het ook voor jou.

Other episodes