Nem sikerült megtalálni vagy betölteni a főosztály hibáját
1. Bemutatkozás
Esetenként egy Java program futtatásakor előfordulhat, hogy a „Nem található vagy betöltődik a főosztály”. Könnyű kitalálni az okát: A JVM nem találta meg a főosztályt, és ezt a hibát adta. De miért ne lehetne?
Ebben az oktatóanyagban megvitatjuk a fő osztály megtalálásának elmulasztásának valószínű okait. Ezenkívül meglátjuk, hogyan lehet ezeket kijavítani.
2. Mintaprogram
Kezdjük egy Helló Világ program:
public class HelloWorld {public static void main (String [] args) {System.out.println ("Hello világ .. !!!"); }}
Most állítsuk össze:
$ javac HelloWorld.java
Itt a fordító létrehoz egy .osztály fájl a programunkhoz. Ez .osztály fájl ugyanabban a könyvtárban lesz létrehozva. A .osztály fájl neve megegyezik a Java programban megadott osztálynévvel. Ez .osztály fájl futtatható.
A következő szakaszokban ezt futtatjuk .osztály fájlt, és próbálja megérteni a „Nem található vagy betölteni a főosztályt” hiba valószínű okait.
3. Helytelen osztálynév
Futtatni a .osztály a Java fordító által generált fájl, az alábbi parancsot használhatjuk:
Jáva
Most futtassuk a programunkat:
$ java helloworld Hiba: A főosztály helloworldje nem található vagy tölthető be
Igen, a „Nem sikerült megtalálni vagy betölteni a főosztály helloworldjét” hibával nem sikerült.
Ahogy korábban tárgyaltuk, a fordító előállítja a .osztály fájl pontosan ugyanazzal a névvel, amelyet a programban a Java osztály kapott. Tehát esetünkben a főosztálynak lesz a neve Helló Világ, nem Helló Világ.
Próbáljunk még egyet a helyes burkolattal:
$ java HelloWorld Hello world .. !!!
Ezúttal sikeresen futott.
3.1. Fájlkiterjesztés
Java program összeállításához meg kell adnunk a fájl nevét annak kiterjesztésével (.Jáva):
$ javac HelloWorld.java
De futtatni a.osztály fájlt, meg kell adnunk az osztály nevét, nem pedig a fájl nevét. Tehát nincs szükség a .osztály kiterjesztés:
$ java HelloWorld.class hiba: Nem sikerült megtalálni vagy betölteni a HelloWorld.class főosztályt
Tehát ismét futtassuk a programunkat a helyes osztálynévvel:
$ java HelloWorld Hello world .. !!!
4. Java csomagnevek
A Java-ban hasonló osztályokat tartunk együtt az úgynevezett a-nak csomag.
Menjünk Helló Világ osztályba a com.baeldung csomag:
csomag com.baeldung; public class HelloWorld {public static void main (String [] args) {System.out.println ("Hello világ .. !!!"); }}
Most fordítsuk le és futtassuk a frissített programot Helló Világ program, mint korábban:
$ java HelloWorld hiba: Nem sikerült megtalálni vagy betölteni a HelloWorld főosztályt
De ismét a „Nem sikerült megtalálni vagy betölteni a HelloWorld főosztályt” hibát kapjuk!
Próbáljuk megérteni, mi hiányzott itt.
A csomagban lévő Java osztály futtatásához meg kell adnunk annak teljesen minősített nevét. Tehát a mi esetünkben HelloWorld's teljesen minősített név com.baeldung.HelloWorld.
Most, amikor létrehoztunk com.baeldung csomagban létrehoztunk egy mappaszerkezetet, például:
com / baeldung / HelloWorld.java
Először próbáljuk meg futtatni a programunkat a com / baeldung Könyvtár:
$ java com.baeldung.HelloWorld hiba: A com.baeldung.HelloWorld főosztály nem található vagy tölthető be
Ennek ellenére nem tudjuk futtatni a programunkat.
Itt adtuk meg a teljesen minősített osztálynevet com.baeldung.HelloWorld, A Java megpróbálta megtalálni a HelloWorld.class fájlt com / baeldung, azon könyvtár alatt, ahonnan a programot futtattuk.
Ahogy már bent voltunk com / baeldung, A Java nem találta és futtatta a Helló Világ program.
Most térjünk vissza a szülő mappába, és futtassuk:
$ java com.baeldung.HelloWorld Hello world .. !!!
Igen, ismét képesek vagyunk köszönetet mondani a világnak.
5. Érvénytelen Classpath
Mielőtt továbblépnénk, először meg kell értenünk, mi az osztályút - ez a jelenleg futó JVM számára elérhető osztályok összessége.
Az classpath változóval mondjuk meg a JVM-nek, hogy hol találja meg .osztály fájlokat a fájlrendszeren.
Egy program futtatása közben megadhatjuk az osztályútvonalat a használatával -útvonal választási lehetőség. példa:
java -classpath / my_programs / compiled_classes HelloWorld
Itt a Java fogja keresni HelloWorld.class fájl a /my_programs / compiled_classes mappa, egy mappa, amelynek nevét épp kitaláltuk. Alapértelmezés szerint, az classpath változó értéke „.”, vagyis az aktuális könyvtár.
A fenti részben megváltoztattuk a könyvtárunkat a program futtatásához. De mi van, ha valamilyen más mappából akarjuk futtatni? Ekkor segít nekünk az classpath változó.
A programunk futtatása a könyvtárból a com / baeldung egyszerűen kijelenthetjük, hogy az osztályútunk két könyvtárral feljebb van - egy-egy csomag minden részéhez:
$ java -claspath ../../ com.baeldung.HelloWorld Hello world .. !!!
Itt a „..” a szülő könyvtárat jelenti. Esetünkben a „../../” jelöli a csomag hierarchiánk tetejét.
6. Következtetés
Ebben az oktatóanyagban megtudtuk a „Nem sikerült megtalálni vagy betölteni a főosztályt” hiba valószínű okait.
Aztán természetesen megtanultuk ezt a hibát is megoldani.