Parandus: põhiklassi ei õnnestunud leida ega laadida

Viga „ Põhiklassi ei õnnestunud leida ega laadida ” ilmneb siis, kui käsureal Java-käsku kasutades Java-programmi käivitamiseks määratakse terminalis klassi nimi. Põhjus, miks see juhtub, on enamasti tingitud kasutaja programmeerimisveast klassi deklareerimisel.

Java käsurealt ei õnnestunud põhiklassi leida ega laadida

Nagu varem mainitud, ei ole see viga enamasti süsteemiga seotud ja kasutaja teeb mitme stsenaariumi korral vea, nagu allpool näidatud. Enne edasiliikumist eeldame, et teil on algteadmised Java programmeerimiskeelest ja selle toimimisest.

Mis põhjustab Java-s tõrke "Põhiklassi ei õnnestunud leida või laadida"?

Teade "Põhiklassi ei leitud ega laadita" tähendab, et Java-mootori esimene samm klassi täitmiseks toomisel nurjus. Java käsk ei suutnud leida klassi õigel kataloog.

Mõnel juhul peate lisama õige failitee ja suunama Java terminal õigesse asukohta. Kuna täidate käsku käsurea terminalist, ei tea arvuti, kus klass asub või kus see asub. Sihitud IDE-de puhul pole see probleem, kuna IDE hoiab kursorit praeguse töökataloogi suunas.

Mis on java süntaks?

Enne kui hakkame otsima tõrkeid, miks terminal tagastab meile tõrke, kui proovite käivitada, peame kõigepealt vaatama käsu süntaksit. Kui te ei kasuta õiget süntaksit, seisate selle veaga paratamatult silmitsi.

Käsu tavaline süntaks on umbes selline:

 java [...] [...]

Siin on käsurea valik, see on täielikult kvalifitseeritud Java klassi nimi ja see on käsurea argument, mis edastatakse teie rakendusele kogu paketi kompileerimisel.

Kehtiva käsu näide on:

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

Ülaltoodud käsk paneb java käsu täitma järgmised toimingud:

  • See otsib klassi „ com.acme.example.ListAppuals ” kompileeritud versiooni .
  • Pärast otsimist laadib see klassi.
  • Järgmisena otsitakse klassi laadimise ajal klassist peamine meetod, millel on kehtiv allkiri, modifikaatorid ja tagastuse tüüp. Põhiklassi näidis oleks umbes järgmine:
avalik staatiline void main (string [])
  • Meetodit kutsutakse stringidena argumentidega 'kevin', 'nooled' ja 'bart'.

Parandamine 'Põhiklassi ei leitud ega laaditud'

1. lahendus: klassi nime argumendi kontrollimine

Kasutajate kõige tavalisem viga on see, et nad esitavad argumendina vale klassi nime (või õige klassi nimi on vale vorm). Kuna me deklareerime parameetreid käsureal, siis on väga tõenäoline, et edastate klassi nime argumendi vales vormis. Siin loetleme kõik võimalikud stsenaariumid, kus saate viga teha.

  • Lihtsa klassi nime kirjutamine . Kui deklareerite klassi paketis, näiteks 'com.acme.example', peate Java-käsus kasutama kogu klassi nime koos paketiga.
java com.acme.example.ListAppuals

selle asemel

java ListAppuals
  • Failinime või teenime deklareerimise asemel peaksite deklareerima klassi nime. Java ei tooda klassi, kui deklareerite sellele tee- / failinime. Vale sisestus sisaldab järgmist:
java ListAppuals.class java com / acme / example / ListAppuals.class
  • Tuleb arvestada ümbrisega . Java käsud on tõstutundlikud ja kui teete vea isegi ühes tähes, ei saa te põhiklassi laadida. Vigade näited on järgmised:
java com.acme.example.listappuals
  • Sa ei tohiks kuulutada allikas failinimi . Nagu eelnevalt mainitud, peate klassi deklareerima ainult õiges klassinime vormingus. Näide veast on:
java ListAppuals.java
  • See tõrge ilmneb ka siis, kui teete trükivea või unustate klassi nime täielikult kirjutada .

Kui olete klassinime deklareerimisel teinud lohakaid vigu, parandage see kindlasti ja proovige seejärel programm käivitada.

2. lahendus: klassiraja kontrollimine

Kui olete klassinime õigesti deklareerinud, kuid teile kuvatakse ikkagi tõrge, on tõenäoline, et java käsk ei leidnud määratud klassinime teelt. Klassirada on tee, kust Java runtime otsib ressursside ja klassi faile. Klassirada saate hõlpsalt määrata kahe erineva käsu abil, nagu allpool näidatud:

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

Klassiraja kohta lisateabe saamiseks tutvuge järgmiste dokumentidega.

Java käskude dokumentatsioon

Klassiraja määramine

3. lahendus: kataloogi kontrollimine

Kui kuulutate kataloogi klassirajaks, vastab see alati nimeruumi juurtele. Näiteks kui „/ usr / local / acme / class” on klassirajal, otsib Java klassi „com.acme.example.Appuals”. See otsib klassi järgmise teenimega:

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

Seega, kui panete klassirajale järgmise aadressi, ei suuda Java klassi leida:

/ usr / local / acme / class / com / acme / näide

Samuti peaksite kontrollima oma alamkataloogi ja kontrollima, kas see vastab FQN-le. Kui teie klasside FQN on „com.acme.example.Appuals“, otsib Java kataloogist „com / acme / example“ „Appuals.class”.

Oletame, et näide on järgmine:

  • Klass, mida soovite juhtida, on: com.acme.example.Appuals
  • Täis faili tee on: /usr/local/acme/classes/com/acme/example/Appuals.class
  • Jooksvat kataloogi on: / usr / local / Acme / tunnid / com / Acme / example /

Siis kehtiksid järgmised stsenaariumid:

# wrong, FQN is needed java Appuals # wrong, there is no `com/acme/example` folder in the current working directory java com.acme.example.Appuals # wrong, similar to above scenario java -classpath . com.acme.example.Appuals # OK ; a relative classpath is set java -classpath ../../.. com.acme.example.Appuals # OK; an absolute classpath is set java -classpath /usr/local/acme/classes com.acme.example.Appuals

Note: The classpath needs to also include all the other classes (non-system) which your applications needs.

Solution 4: Checking class package

Kui teie puhul vastavad kõik ülaltoodud lahendused, peate veenduma, et lähtekood on õiges kaustas. Samuti olete pakendi õigesti deklareerinud . Kui käivitate oma koodi IDE-ga, teavitab see teid tõenäoliselt probleemist. Kuna aga meie käitame seda käsureal, jääb viga märkamatuks ja saate arutlusel oleva klassi vea.