Fix: Kunne ikke finne eller laste hovedklasse

Feilen ' Kunne ikke finne eller laste hovedklasse ' oppstår når du bruker en java-kommando i ledeteksten for å starte et Java-program ved å spesifisere klassens navn på terminalen. Årsaken til at dette skjer skyldes mest brukerens programmeringsfeil mens han erklærer klassen.

Kunne ikke finne eller laste Java-kommandolinjen i hovedklassen

Som nevnt tidligere, er denne feilen stort sett ikke relatert til systemet, og brukeren gjør en feil i flere scenarier som vist nedenfor. Før du går videre antar vi at du har en grunnleggende kunnskap om Java-programmeringsspråk og hvordan det fungerer.

Hva er årsaken til feilen "Kunne ikke finne eller laste hovedklasse" i Java?

Meldingen "Kunne ikke finne eller laste hovedklasse" betyr at det første trinnet i Java-motoren som henter klassen for utføring, mislyktes. Java-kommandoen klarte ikke å finne klassen i riktig katalog.

I noen tilfeller må du legge til riktig filsti og peke Java-terminalen til riktig sted. Siden du utfører kommandoen fra kommandolinjeterminalen, vet ikke datamaskinen hvor klassen er å finne eller hvor den ligger. I målrettede IDE-er er dette ikke problemet, da IDE holder en peker som peker mot den gjeldende arbeidskatalogen.

Hva er 'java' syntaks?

Før vi begynner å feilsøke hvorfor terminalen returnerer oss en feil når vi prøver å utføre, må vi først se på syntaks for kommandoen. Hvis du ikke bruker riktig syntaks, vil du unngå denne feilen.

Den normale syntaks for kommandoen er noe slik:

 java [...] [...] 

Her er et kommandolinjealternativ, er et fullt kvalifisert Java-klassens navn, og er et kommandolinjeargument som sendes til applikasjonen din når hele pakken er samlet.

Et eksempel på en gyldig kommando er:

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

Kommandoen ovenfor vil gjøre at Java-kommandoen utfører følgende operasjoner:

  • Den vil søke etter en kompilert versjon av klassen ' com.acme.example.ListAppuals '.
  • Etter søking vil den laste klassen.
  • Neste, når klassen er lastet, blir klassen søkt etter en 'hovedmetode' med gyldig signatur, modifikatorer og returtype. Et eksempel på hovedklasse vil være noe som:
 public static void main (String []) 
  • Metoden vil bli kalt med argumenter 'kevin', 'piler' og 'bart' som streng [].

Hvordan fikse 'Kunne ikke finne eller laste hovedklasse'

Løsning 1: Kontroller klassens navnargument

Den vanligste feilen brukere gjør er at de oppgir et galt klassens navn som et argument (eller et riktig klassens navn er en feil form). Siden vi erklærer parametere på kommandolinjen, er det svært sannsynlig at du vil passere klassens navnargument i en feil form. Her vil vi liste opp alle mulige scenarier der du kan gjøre en feil.

  • Å skrive et enkelt klassens navn . Hvis du erklærer klassen i en pakke som 'com.acme.example', må du bruke hele klassens navn inkludert pakken i Java-kommandoen.
 java com.acme.example.ListAppuals 

i stedet for

 java ListAppuals 
  • Du bør erklære et klassesnavn i stedet for å erklære et filnavn eller banenavn. Java henter ikke klassen hvis du erklærer et banenavn / filnavn for den. Feiloppføringer inkluderer følgende:
 java ListAppuals.class java com / acme / example / ListAppuals.class 
  • Foringsrør bør tas i betraktning. Java-kommandoer er store og små bokstaver, og hvis du gjør en feil med en bokstav, vil du ikke kunne laste hovedklassen. Et eksempel på uriktige feil er:
 java com.acme.example.listappuals 
  • Du skal ikke erklære et kildefilnavn . Som nevnt tidligere, trenger du bare å erklære klassen i riktig format for full klassesnavn. Eksempel på en feil er:
 java ListAppuals.java 
  • Denne feilen vil også oppstå hvis du gjør en feilfeil eller glemmer å skrive klassens navn helt .

Hvis du har gjort noen slurvete feil når du erklærer klassens navn, må du sørge for å fikse det og prøve å starte programmet.

Løsning 2: Kontroller klassetraseen

Hvis du har erklært klassenavnet riktig, men fremdeles vises feilen, er sjansen stor for at java-kommandoen ikke kunne finne det angitte klassenavnet på banen. Klassepaden er en bane der Java-runtime søker etter ressurs- og klassefiler. Du kan enkelt stille klassetraseen ved å bruke to forskjellige kommandoer som vist nedenfor:

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

For å få mer innsikt i klassetraseen, bør du sjekke ut følgende dokumenter.

Java-kommandodokumentasjon

Innstiller klassesti

Løsning 3: Kontroller katalog

Når du erklærer en katalog som en klassespor, vil den alltid tilsvare roten til navneområdet. For eksempel hvis “/ usr / local / acme / Classes” er på klassesporet, vil Java søke etter en klasse “com.acme.example.Appuals”. Den vil se etter en klasse med følgende banenavn:

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

Så hvis du legger følgende adresse i klassesporet, vil Java ikke kunne finne klassen:

 / Usr / local / Acme / klasser / no / acme / eksempel 

Du bør også sjekke underkatalogen din og se om den samsvarer med FQN. Hvis klassen din FQN er "com.acme.example.Appuals", vil Java søke etter en "Appuals.class" i katalogen "com / acme / example".

For å gi deg et eksempel, la oss anta følgende scenario:

  • Klassen du vil kjøre er: com.acme.example.Appuals
  • Den fullstendige filstien er: /usr/local/acme/classes/com/acme/example/Appuals.class
  • Den nåværende arbeidskatalogen er: / usr / local / acme / Classes / com / acme / eksempel /

Da ville følgende scenarier holde:

 # galt, FQN er nødvendig java Appuals # galt, det er ingen `com / acme / eksempel`-mappe i den gjeldende arbeidskatalogen java com.acme.example.Appuals # galt, ligner på scenen over java -classpath. com.acme.example.Appuals # OK; en relativ klassespor er satt java -classpath ../../ .. com.acme.example.Appuals # OK; en absolutt klassespor er satt java -classpath / usr / local / acme / classes com.acme.example.Appuals 

Merk: Klassesporet må også inkludere alle de andre klassene (ikke-systemet) som applikasjonene dine trenger.

Løsning 4: Kontroller klassepakke

Hvis alle de ovennevnte løsningene stemmer i ditt tilfelle, må du sørge for at kildekoden er plassert i riktig mappe. Du har også erklært pakken korrekt. Hvis du kjører koden din med en IDE, vil den sannsynligvis informere deg om problemet. Imidlertid, i vårt tilfelle, siden vi kjører den i ledetekst, vil feilen ikke bli lagt merke til, og du vil få klassefeilen under diskusjon.

Interessante Artikler