Javítás: A főosztályt nem sikerült megtalálni vagy betölteni

A „A főosztály nem található vagy betöltve ” hiba akkor fordul elő, amikor a java parancsot a parancssorban egy Java program indításához használja, az osztály nevének megadásával a terminálban. Ennek oka főleg a felhasználó programozási hibájának tudható be, amikor deklarálta az osztályt.

Nem található a főosztály a Java parancssorban, és nem tölthető be

Mint korábban említettük, ez a hiba többnyire nem kapcsolódik a rendszerhez, és a felhasználó több szituációban is hibázik, az alábbiak szerint. Mielőtt továbblépnénk, feltételezzük, hogy alapvető ismeretekkel rendelkezik a Java programozási nyelvről és annak működéséről.

Mi okozza a "Nem található vagy betöltve a főosztály" hibát a Java-ban?

A "Nem található vagy betöltődik a főosztály" üzenet azt jelenti, hogy a Java motor első lépése, amely lekérdezi az osztályt végrehajtásra, sikertelen volt. A java parancs nem találta az osztályt a megfelelő könyvtárban.

Bizonyos esetekben meg kell adnia a helyes fájl elérési utat, és a Java terminált a megfelelő helyre kell irányítania. Mivel a parancsot a parancssori terminálról hajtja végre, a számítógép nem tudja, hol található az osztály, hol található. A megcélzott IDE-kben ez nem a probléma, mivel az IDE mutatót tart az aktuális munkakönyvtár felé mutatva.

Mi az a „java” szintaxis?

Mielőtt elkezdenénk a hibaelhárítást, miért ad vissza hibát a terminál a végrehajtás során, először meg kell vizsgálnunk a parancs szintaxisát. Ha nem a megfelelő szintaxist használja, akkor elkerülhetetlenül szembe kell néznie ezzel a hibával.

A parancs normál szintaxisa valami ilyesmi:

 java [...] [...]

Ez egy parancssori opció, egy teljesen minősített Java osztálynév, és egy parancssori argumentum, amelyet a teljes csomag fordításakor adunk át az alkalmazásnak.

Az érvényes parancsra példa:

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

A fenti parancs a java parancsot a következő műveletek végrehajtására készteti:

  • Megkeresi a ' com.acme.example.ListAppuals ' osztály lefordított változatát .
  • A keresés után betölti az osztályt.
  • Ezután, amikor az osztály betöltődik, az osztály megkeresi a „main” metódust érvényes aláírással, módosítókkal és visszatérési típussal. A minta fő osztály valami ilyesmi lehet:
public static void main (String [])
  • A metódust 'kevin', 'nyilak' és 'bart' argumentumokkal hívjuk meg stringként [].

A "A főosztály nem található vagy betöltve" hibaelhárítás

1. megoldás: Az osztálynév argumentum ellenőrzése

A felhasználók által elkövetett leggyakoribb hiba az, hogy rossz osztálynevet adnak meg argumentumként (vagy a helyes osztálynév hibás forma). Mivel paramétereket deklarálunk a parancssorban, nagyon valószínű, hogy az osztálynév argumentumot rossz formában adja át. Itt felsoroljuk az összes lehetséges forgatókönyvet, ahol hibázhat.

  • Egyszerű osztálynév írása . Ha az osztályt egy olyan csomagban deklarálja, mint például a „com.acme.example”, akkor a Java parancsban a teljes osztálynevet kell használnia, beleértve a csomagot is.
java com.acme.example.ListAppuals

ahelyett

java ListAppuals
  • Fájlnév vagy elérési út deklarálása helyett deklarálnia kell egy osztálynevet . A Java nem tölti be az osztályt, ha deklarál egy elérési utat / fájlnevet. A helytelen bejegyzések a következőket tartalmazzák:
java ListAppuals.class java com / acme / example / ListAppuals.class
  • A burkolatot figyelembe kell venni. A Java parancsok megkülönböztetik a kis- és nagybetűket, és ha akár egyetlen betűt is hibázik, akkor nem tudja betölteni a fő osztályt. A hibás hibákra példa :
java com.acme.example.listappuals
  • Nem szabad deklarálni a forrás fájlnevét . A korábbiakban említettek szerint csak az osztályt kell a teljes teljes osztálynév formátumban deklarálni. Példa a hibára:
java ListAppuals.java
  • Ez a hiba akkor is előfordul, ha gépelési hibát követ el, vagy elfelejtette teljes egészében megírni az osztály nevét .

Ha bármi hibát követett el az osztálynév deklarálásakor, győződjön meg róla, hogy kijavította, majd megpróbálja elindítani a programot.

2. megoldás: Az osztályút ellenőrzése

Ha helyesen deklarálta az osztálynevet, de továbbra is megjelenik a hiba, akkor valószínű, hogy a java parancs nem találta meg a megadott osztálynevet az elérési útvonalon. Az classpath egy olyan útvonal, ahol a Java futásidejű erőforrás- és osztályfájlokat keres. Könnyen beállíthatja az osztályútvonalat két különböző parancs segítségével, az alábbiak szerint:

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

Ha többet szeretne megtudni az osztályútról, olvassa el a következő dokumentumokat.

Java parancsdokumentáció

Osztályút beállítása

3. megoldás: Könyvtár ellenőrzése

Ha egy könyvtárat osztályútként deklarál, akkor az mindig a névtér gyökerének felel meg. Például, ha az „/ usr / local / acme / class” az osztályútvonalon van, akkor a Java a „com.acme.example.Appuals” osztályra keres. Osztályt fog keresni a következő útvonalnévvel:

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

Tehát lényegében, ha a következő címet írja be az osztályútvonalba, a Java nem fogja megtalálni az osztályt:

/ usr / local / acme / class / com / acme / example

Ellenőrizze az alkönyvtárat is, és nézze meg, hogy megfelel-e az FQN-nek. Ha az osztályok FQN értéke „com.acme.example.Appuals”, akkor a Java az „Appuals.class” kifejezésre keres a „com / acme / example” könyvtárban.

Tegyünk fel egy példát a következő forgatókönyvre:

  • A futtatni kívánt osztály: com.acme.example.Appuals
  • A teljes fájl elérési útja : /usr/local/acme/classes/com/acme/example/Appuals.class
  • A jelenlegi munkakönyvtár : / usr / local / acme / class / com / acme / example /

Ekkor a következő forgatókönyvek lennének érvényesek:

# helytelen, az FQN-re van szükség java Appuals # helytelen, a `java com.acme.example munkakönyvtárban nincs` com / acme / example` mappa. com.acme.example.Appuals # OK; egy relatív osztályút beállítása java -classpath ../../ .. com.acme.example.Appuals # OK; egy abszolút osztályút a java -classpath / usr / local / acme / class com.acme.example.Appuals

Megjegyzés: Az osztályútnak tartalmaznia kell az összes többi osztályt (nem rendszer), amelyre az alkalmazásoknak szüksége van.

4. megoldás: Osztálycsomag ellenőrzése

Ha az összes fenti megoldás igaz Önnek, meg kell győződnie arról, hogy a forráskód a megfelelő mappába került. Ezenkívül helyesen deklarálta a csomagot . Ha IDE-vel futtatja a kódot, valószínűleg tájékoztatja Önt a problémáról. Esetünkben azonban, mivel parancssorban futtatjuk, a hiba észrevétlen marad, és a tárgyalt osztályhibát kapja.