Oplossing: kon hoofdklasse niet vinden of laden



Probeer Ons Instrument Voor Het Oplossen Van Problemen

De fout ' Kan hoofdklasse niet vinden of laden ’Treedt op bij gebruik van een java-commando in de opdrachtprompt om een ​​Java-programma te starten door de klassenaam in de terminal op te geven. De reden waarom dit gebeurt, is voornamelijk te wijten aan de programmeerfout van de gebruiker bij het declareren van de klasse.



Kan hoofdklasse niet vinden of laden op de Java-opdrachtregel

Kan de Java-opdrachtregel van de hoofdklasse niet vinden of laden



Zoals eerder vermeld, is deze fout meestal niet gerelateerd aan het systeem en maakt de gebruiker een fout in verschillende scenario's, zoals hieronder weergegeven. Voordat we verder gaan, gaan we ervan uit dat u een basiskennis heeft van de programmeertaal Java en hoe deze werkt.



Wat veroorzaakt de fout ‘Kan hoofdklasse niet vinden of laden’ in Java?

Het bericht ‘Kan hoofdklasse niet vinden of laden’ betekent dat de eerste stap van het ophalen van de klasse door de Java-engine voor uitvoering is mislukt. De java-opdracht kon niet bevind zich de klas in de juiste map.

In sommige gevallen moet u de juiste bestandspad en wijs de Java-terminal naar de juiste locatie. Aangezien u de opdracht uitvoert vanaf de opdrachtregelterminal, weet de computer niet waar de klasse zich bevindt of waar deze zich bevindt. In gerichte IDE's is dit niet het probleem, aangezien de IDE een aanwijzer naar de huidige werkdirectory houdt.

Wat is de syntaxis van ‘java’?

Voordat we beginnen met het oplossen van problemen waarom de terminal ons een fout retourneert bij het proberen uit te voeren, moeten we eerst de syntaxis van de opdracht bekijken. Als u niet de juiste syntaxis gebruikt, zult u deze fout onvermijdelijk tegenkomen.



De normale syntaxis van de opdracht is ongeveer als volgt:

java [...] [...]

Hier is een opdrachtregeloptie, is een volledig gekwalificeerde Java-klassenaam en is een opdrachtregelargument dat wordt doorgegeven aan uw toepassing wanneer het hele pakket is gecompileerd.

Een voorbeeld van een geldig commando is:

java -Xmx100m com.acme.example.ListAppuals kevin pijlen bart

Het bovenstaande commando zorgt ervoor dat het java-commando de volgende bewerkingen uitvoert:

  • Er wordt gezocht naar een gecompileerde versie van de klasse ‘ com.acme.example.ListAppuals '.
  • Na het zoeken wordt de klas geladen.
  • Vervolgens, wanneer de klasse is geladen, wordt de klasse doorzocht op een ‘main’ -methode met een geldige handtekening, modificatoren en retourneringstype. Een voorbeeld van een hoofdklasse zou zoiets zijn als:
public static void main (String [])
  • De methode wordt aangeroepen met de argumenten ‘kevin’, ‘pijlen’ en ‘bart’ als tekenreeks [].

Hoe te repareren ‘Kan hoofdklasse niet vinden of laden’

Oplossing 1: het argument van de klassenaam controleren

De meest voorkomende fout die gebruikers maken, is dat ze een verkeerde klassenaam als argument opgeven (of een juiste klassenaam is een verkeerde vorm). Aangezien we parameters op de opdrachtregel declareren, is het zeer waarschijnlijk dat u het klassenaamargument in een verkeerde vorm doorgeeft. Hier zetten we alle mogelijke scenario's op een rij waarin u een fout kunt maken.

  • Een .... schrijven eenvoudige klassenaam . Als u de klasse declareert in een pakket zoals ‘com.acme.example’, moet u de volledige klasnaam inclusief het pakket in de Java-opdracht.
java com.acme.example.ListAppuals

in plaats van

java ListAppuals
  • Je zou moeten declareer een klasnaam in plaats van een bestandsnaam of padnaam te declareren. Java haalt de klasse niet op als u er een padnaam / bestandsnaam voor opgeeft. Niet correct inzendingen omvatten het volgende:
java ListAppuals.class java com / acme / voorbeeld / ListAppuals.class
  • Behuizing er moet rekening worden gehouden. Java-opdrachten zijn hoofdlettergevoelig en als u een fout maakt van zelfs maar één letter, kunt u de hoofdklasse niet laden. Een voorbeeld van onjuiste fouten zijn:
java com.acme.example.listappuals
  • U zou niet verklaren aan bron bestandsnaam . Zoals eerder vermeld, hoeft u de klasse alleen in het juiste volledige classname-formaat te declareren. Voorbeeld van een fout is:
java ListAppuals.java
  • Deze fout treedt ook op als u een typfout of vergeet de klassenaam helemaal te schrijven .

Als je slordige fouten hebt gemaakt bij het declareren van de klassenaam, zorg er dan voor dat je dit oplost en probeer dan het programma te starten.

Oplossing 2: klassenpad controleren

Als je de klassenaam correct hebt gedeclareerd maar nog steeds de foutmelding krijgt, is de kans groot dat het java-commando de opgegeven klassenaam op het pad niet heeft kunnen vinden. Het klassenpad is een pad waar Java-runtime naar bron- en klassebestanden zoekt. U kunt het klassenpad eenvoudig instellen met twee verschillende opdrachten, zoals hieronder wordt weergegeven:

C:> sdkTool -classpath classpath1; classpath2 ... C:> set CLASSPATH = classpath1; classpath2 ...

Om meer inzicht te krijgen in het klassenpad, moet u de volgende documenten bekijken.

Java-opdrachtdocumentatie

Classpath instellen

Oplossing 3: directory controleren

Wanneer u een directory als klassepad declareert, zal deze altijd overeenkomen met de root van de naamruimte. Als bijvoorbeeld '/ usr / local / acme / classes' op het klassenpad staat, dan zoekt Java naar een klasse 'com.acme.example.Appuals'. Het zoekt naar een klasse met de volgende padnaam:

/usr/local/acme/classes/com/acme/example/Appuals.class

Dus als u het volgende adres in het klassenpad plaatst, kan Java de klasse niet vinden:

/ usr / local / acme / classes / com / acme / example

Je moet ook je submap en kijk of het overeenkomt met de FQN. Als de FQN van uw klassen 'com.acme.example.Appuals' is, dan zoekt Java naar een 'Appuals.class' in de directory 'com / acme / example'.

Om u een voorbeeld te geven, stellen we het volgende scenario voor:

  • De klasse die u wilt uitvoeren, is: com.acme.example.Appuals
  • De volledig bestandspad is: /usr/local/acme/classes/com/acme/example/Appuals.class
  • De huidige werkmap is: / usr / local / acme / classes / com / acme / example /

Dan zouden de volgende scenario's gelden:

# fout, FQN is nodig java Appuals # fout, er is geen `com / acme / example` map in de huidige werkmap java com.acme.example.Appuals # fout, vergelijkbaar met het bovenstaande scenario java -classpath. com.acme.example.Appuals # OK; een relatief classpath is ingesteld java -classpath ../../ .. com.acme.example.Appuals # OK; een absoluut klassenpad is ingesteld java -classpath / usr / local / acme / classes com.acme.example.Appuals

Notitie: Het klassenpad moet ook alle andere klassen (niet-systeem) bevatten die uw toepassingen nodig hebben.

Oplossing 4: klassenpakket controleren

Als alle bovenstaande oplossingen in uw geval kloppen, moet u ervoor zorgen dat uw broncode in de juiste map wordt geplaatst. U hebt ook correct verklaard pakket . Als u uw code met een IDE uitvoert, zal deze u waarschijnlijk informeren over het probleem. In ons geval, omdat we het echter in de opdrachtprompt uitvoeren, zal de fout onopgemerkt blijven en krijgt u de klassefout die wordt besproken.

4 minuten gelezen