Fix: kon hoofdklasse niet vinden of laden

De fout ' Kon hoofdklasse niet vinden of laden ' treedt op bij het gebruik van een Java-opdracht in de opdrachtprompt om een ​​Java-programma te starten door de klassenaam op te geven in de terminal. De reden waarom dit gebeurt is vooral te wijten aan de programmeerfout van de gebruiker bij het verklaren van de klasse.

Kon hoofdklasse- Java-opdrachtregel 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 je een basiskennis hebt van de programmeertaal van Java en hoe het werkt.

Wat veroorzaakt de fout 'Kon hoofdklasse niet vinden of laden' in Java?

Het bericht 'Kon hoofdklasse niet vinden of laden' betekent dat de eerste stap van het ophalen van de klasse door de Java-engine is mislukt. Het java-commando kon de klasse niet in de juiste map vinden.

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

Wat is de Java-syntaxis?

Voordat we beginnen met het oplossen van problemen waarom de terminal ons een foutmelding geeft wanneer we 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 het commando is zoiets als dit:

 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 wordt gecompileerd.

Een voorbeeld van een geldige opdracht is:

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

De bovenstaande opdracht zorgt ervoor dat de Java-opdracht de volgende bewerkingen uitvoert:

  • Er wordt gezocht naar een gecompileerde versie van de klasse ' com.acme.example.ListAppuals '.
  • Na het zoeken wordt de klasse geladen.
  • Wanneer de klasse vervolgens wordt geladen, zal de klasse worden doorzocht op een 'hoofd'-methode met een geldige handtekening, modificatoren en retourtype. Een voorbeeld van een hoofdklasse zou zoiets zijn als:
 public static void main (String []) 
  • De methode zal worden aangeroepen met argumenten 'kevin', 'pijlen' en 'bart' als string [].

Hoe te repareren 'Kon hoofdklasse niet vinden of laden'

Oplossing 1: argument voor klassennaam 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). Omdat we parameters op de opdrachtregel declareren, is het zeer waarschijnlijk dat u het argument voor de klassennaam in een verkeerde vorm doorgeeft. Hier zullen we een lijst maken van alle mogelijke scenario's waarin u een fout kunt maken.

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

in plaats van

 java ListAppuals 
  • U moet een klassenaam opgeven in plaats van een bestandsnaam of padnaam. Java haalt de klasse niet op als u er een padnaam / bestandsnaam voor opgeeft. Onjuiste vermeldingen zijn onder meer:
 java ListAppuals.class java com / acme / example / ListAppuals.class 
  • Er moet rekening worden gehouden met de behuizing . Java-opdrachten zijn hoofdlettergevoelig en als u een letterfout maakt, kunt u de hoofdklasse niet laden. Een voorbeeld van onjuiste fouten zijn:
 java com.acme.example.listappuals 
  • Geef geen bronbestandsnaam op . Zoals eerder vermeld, hoeft u alleen de klasse in de juiste indeling voor de volledige klassenaam aan te geven. Voorbeeld van een fout is:
 java ListAppuals.java 
  • Deze fout treedt ook op als u een typefout maakt of vergeet de klassennaam volledig te schrijven .

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

Oplossing 2: Classpath controleren

Als u de klassenaam correct hebt aangegeven, maar de fout nog steeds wordt weergegeven, is de kans groot dat het Java-commando de opgegeven klassenaam niet kon vinden op het pad. Het klassepad is een pad waar Java runtime naar resource- en klassebestanden zoekt. U kunt het klassenpad eenvoudig instellen met behulp van twee verschillende opdrachten, zoals hieronder wordt weergegeven:

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

Bekijk de volgende documenten voor meer inzicht in het classpath.

Java-opdrachtdocumentatie

Classpath instellen

Oplossing 3: Directory controleren

Wanneer u een map als een klassepad declareert, komt deze altijd overeen met de root van de naamruimte. Als bijvoorbeeld '/ usr / local / acme / classes' op het classpath staat, zal Java zoeken naar een class 'com.acme.example.Appuals'. Er wordt gezocht naar een klasse met de volgende padnaam:

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

Dus in wezen, als u het volgende adres in het classpath plaatst, kan Java de class niet vinden:

 / Usr / local / Acme / classes / com / Acme / example 

Controleer ook uw submap en kijk of deze overeenkomt met de FQN. Als uw klassen FQN "com.acme.example.Appuals" is, zal Java zoeken naar een "Appuals.class" in de map "com / acme / example".

Laten we, om u een voorbeeld te geven, het volgende scenario veronderstellen:

  • De klasse die u wilt uitvoeren is: com.acme.example.Appuals
  • Het volledige 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 map `com / acme / example` in de huidige werkmap java com.acme.example.Appuals # fout, vergelijkbaar met bovenstaande scenario java -classpath. com.acme.example.Appuals # OK; een relatief klassepad is ingesteld java -classpath ../../ .. com.acme.example.Appuals # OK; een absoluut classpath wordt ingesteld java -classpath / usr / local / acme / classes com.acme.example.Appuals 

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

Oplossing 4: Klassepakket controleren

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

Interessante Artikelen