Fix: kunde inte hitta eller ladda huvudklass

Felet " Kunde inte hitta eller ladda huvudklass " inträffar när du använder ett java-kommando i kommandotolken för att starta ett Java-program genom att ange klassnamnet i terminalen. Anledningen till att detta händer beror främst på användarens programmeringsfel medan han förklarar klassen.

Det gick inte att hitta eller ladda Java-kommandoraden för huvudklass

Som nämnts tidigare är detta fel oftast inte relaterat till systemet och användaren gör ett misstag i flera scenarier som visas nedan. Innan vi går vidare antar vi att du har en grundläggande kunskap om Java-programmeringsspråk och hur det fungerar.

Vad orsakar felet "Kunde inte hitta eller ladda huvudklass" i Java?

Meddelandet "Det gick inte att hitta eller ladda huvudklass" betyder att det första steget i Java-motorn som hämtar klassen för körning misslyckades. Java-kommandot kunde inte hitta klassen i rätt katalog.

I vissa fall måste du lägga till rätt filväg och peka Java-terminalen till rätt plats. Eftersom du kör kommandot från kommandoradsterminalen, vet datorn inte var klassen ska hittas eller var den ligger. I riktade IDE: er är det inte problemet eftersom IDE håller en pekare som pekar mot den aktuella arbetskatalogen.

Vad är "java" -syntax?

Innan vi börjar felsöka varför terminalen returnerar ett fel när vi försöker köra, måste vi först titta på kommandoens syntax. Om du inte använder rätt syntax kommer du att möta detta fel oundvikligen.

Den normala syntaxen för kommandot är något liknande:

 java [...] [...] 

Här är ett kommandoradsalternativ, är ett fullt kvalificerat Java-klassnamn och är ett kommandoradsargument som skickas till din applikation när hela paketet är kompilerat.

Ett exempel på ett giltigt kommando är:

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

Ovanstående kommando gör att java-kommandot utför följande operationer:

  • Den söker efter en sammanställd version av klassen ' com.acme.example.ListAppuals '.
  • Efter sökning kommer det att ladda klassen.
  • Därefter, när klassen laddas, söker klassen efter en "huvudmetod" med en giltig signatur, modifierare och returtyp. Ett exempel på huvudklass skulle vara något som:
 public static void main (String []) 
  • Metoden kommer att kallas med argument "kevin", "pilar" och "bart" som sträng [].

Hur man fixar "Kunde inte hitta eller ladda huvudklass"

Lösning 1: Kontrollera klassens namnargument

Det vanligaste misstaget som användare gör är att de anger ett fel klassnamn som ett argument (eller ett korrekt klassnamn är en fel form). Eftersom vi förklarar parametrar på kommandoraden är det mycket troligt att du kommer att skicka klassnamnsargumentet i fel form. Här listar vi alla möjliga scenarier där du kan göra ett misstag.

  • Att skriva ett enkelt klassnamn . Om du deklarerar klassen i ett paket som 'com.acme.example', måste du använda hela klassnamnet inklusive paketet i Java-kommandot.
 java com.acme.example.ListAppuals 

istället för

 java ListAppuals 
  • Du bör förklara ett klassnamn istället för att deklarera ett filnamn eller sökväg. Java hämtar inte klassen om du förklarar ett söknamn / filnamn för det. Felaktiga poster inkluderar följande:
 java ListAppuals.class java com / acme / exempel / ListAppuals.class 
  • Höljen bör beaktas. Java-kommandon är skiftlägeskänsliga och om du gör ett misstag med ens en bokstav kommer du inte att kunna ladda huvudklassen. Ett exempel på felaktiga misstag är:
 java com.acme.example.listappuals 
  • Du bör inte förklara källfilens namn . Som nämnts tidigare behöver du bara deklarera klassen i rätt klassnamnsformat. Exempel på ett misstag är:
 java ListAppuals.java 
  • Det här felet kommer också att uppstå om du gör ett skrivfel eller glömmer att skriva klassnamnet helt .

Om du har gjort några slarviga misstag när du förklarar klassnamnet, se till att du fixar det och försök sedan starta programmet.

Lösning 2: Kontroll av klassväg

Om du har deklarerat klassnamnet korrekt men fortfarande visas felet, är chansen stor att java-kommandot inte kunde hitta det angivna klassnamnet vid sökvägen. Klassvägen är en sökväg där Java-runtime söker efter resurs- och klassfiler. Du kan enkelt ställa in klassvägen med två olika kommandon som visas nedan:

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

För att få mer inblick i klassvägen bör du kolla in följande dokument.

Java-kommandodokumentation

Ställer in klassväg

Lösning 3: Kontrollera katalogen

När du förklarar en katalog som en klassväg kommer den alltid att motsvara roten till namnområdet. Till exempel om "/ usr / local / acme / klasser" finns på klassvägen, kommer Java att söka efter en klass "com.acme.example.Appuals". Den letar efter en klass med följande sökväg:

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

Så i själva verket, om du sätter följande adress i klassvägen, kommer Java inte att kunna hitta klassen:

 / Usr / local / acme / klasser / com / acme / exempel 

Du bör också kontrollera din underkatalog och se om den matchar FQN. Om dina klasser FQN är "com.acme.example.Appuals", kommer Java att söka efter en "Appuals.class" i katalogen "com / acme / exempel".

För att ge dig ett exempel, låt oss anta följande scenario:

  • Klassen du vill köra är: com.acme.example.Appuals
  • Den fullständiga filvägen är: /usr/local/acme/classes/com/acme/example/Appuals.class
  • Den nuvarande arbetskatalogen är: / usr / local / acme / klasser / com / acme / exempel /

Då skulle följande scenarier hålla:

 # fel, FQN behövs java Appuals # fel, det finns ingen mapp "com / acme / exempel" i den aktuella fungerande katalogen java com.acme.example.Appuals # fel, liknande ovanstående scenario java -classpath. com.acme.example.Appuals # OK; en relativ klassbana är inställd java -classpath ../../ .. com.acme.example.Appuals # OK; en absolut klassväg är inställd java -classpath / usr / local / acme / klasser com.acme.example.Appuals 

Obs: Klassvägen måste också inkludera alla andra klasser (icke-system) som dina applikationer behöver.

Lösning 4: Kontrollera klasspaketet

Om alla ovanstående lösningar gäller i ditt fall måste du se till att din källkod är placerad i rätt mapp. Du har också förklarat paketet korrekt. Om du kör din kod med en IDE kommer den förmodligen att informera dig om problemet. Men i vårt fall, eftersom vi kör det i kommandotolken, kommer felet att bli obemärkt och du får klassfelet diskuterat.

Intressanta Artiklar