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:\java
bevindt, 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 HelloWorld
is, 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%
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
- 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.
- De eerste regel compileert uw HLELLDORD.JAVA-bestand, waardoor een HLELLDORLD.CLASS-bestand maakt.
- De tweede regel voert het HLELLOWORLD.CLASS-bestand.
- Het -classpath vertelt Java waar u op zoek bent naar het opgegeven bestand in elke opdracht
- 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 )
- 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:
- 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.
-
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 \”
-
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 CLASSPATH
moet de directory bevatten waar het .class-bestand van uw Java-programma’s zich bevindt. U kunt ‘.’ in CLASSPATH
om aan te geven dat de huidige map moet worden opgenomen.
set CLASSPATH=%CLASSPATH%;.
Antwoord 9
Je CLASSPATH
moet ook de locatie van je HelloWorld
-les weten.
In eenvoudige bewoordingen moet u punt .
(betekent huidige map) in het CLASSPATH
als u javac
en java
commando’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.
- Geprobeerd CLASSPATH te wijzigen, om klassenbibliotheken op te nemen,
set classpath=JDKbin;JDKlib;JREbin;JRElib;myClassLib;.
- De huidige map gewijzigd in bovenliggende map (pakketmap) en moe
java <packageName>.<className>
probeerde ook dejava ..\<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:
- Hernoem de bestandsnaam & klasse naar Abc
- Sluit de editor
- Open de editor opnieuw
- Hernoem de bestandsnaam & class, van Abc, terug naar de vorige naam
- 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 NoClassDefFoundError
voor klasse XXXXXX
hebt, 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.