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.