Oplossing: kon hoofdklasse niet vinden of laden

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

Kan hoofdklasse niet vinden of laden op de Java-opdrachtregel

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 'Kon hoofdklasse niet vinden of laden' betekent dat de eerste stap van de Java-engine om de klasse op te halen voor uitvoering is mislukt. De java opdracht was niet in staat om te vinden van de klasse in de juiste directory.

In sommige gevallen moet u het juiste bestandspad toevoegen en de Java-terminal naar de juiste locatie verwijzen. Aangezien u de opdracht uitvoert vanaf de opdrachtregelterminal, weet de computer niet waar de klasse te vinden is 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 '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 aan uw toepassing wordt doorgegeven 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:

  • Het zoekt 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 'hoofd'-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 string [].

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 eenvoudige klassenaam schrijven . Als u de klasse declareert in een pakket zoals 'com.acme.example', moet u de volledige klassenaam inclusief het pakket in het Java-commando gebruiken.
java com.acme.example.ListAppuals

in plaats van

java ListAppuals
  • Je zou een klassenaam moeten declareren in plaats van een bestandsnaam of padnaam te declareren. 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 / voorbeeld / ListAppuals.class
  • Er moet rekening worden gehouden met de behuizing . Java-opdrachten zijn hoofdlettergevoelig en als u een fout maakt van zelfs maar één letter, kunt u de hoofdklasse niet laden. Een voorbeeld van foutieve fouten zijn:
java com.acme.example.listappuals
  • Je moet niet verklaren een 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 typefout maakt of vergeet de klassenaam helemaal op 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

Als u een directory als klassepad declareert, komt deze altijd overeen met de root van de naamruimte. Als bijvoorbeeld "/ usr / local / acme / classes" op het klassenpad staat, zal Java zoeken 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 controleren en kijken of deze 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
  • 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 `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

Opmerking: 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. Ook heb je het pakket correct aangegeven . 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.

Aanbevolen

Oplossing: Minecraft reageert niet
Wat is de registratietoepassing voor een digitale tv-tuner en moet deze worden verwijderd?
Wat is FileRepMalware en moet u het verwijderen?