Nepodarilo sa nájsť alebo načítať chybu hlavnej triedy

1. Úvod

Príležitostne, keď spustíme program Java, môžeme vidieť „Nepodarilo sa nájsť alebo načítať hlavnú triedu“. Je ľahké uhádnuť dôvod: JVM nedokázalo nájsť hlavnú triedu a urobilo túto chybu. Ale prečo by to nemohlo?

V tomto tutoriáli si rozoberieme pravdepodobné dôvody neúspechu pri hľadaní hlavnej triedy. Uvidíme tiež, ako ich opraviť.

2. Ukážkový program

Začneme s HelloWorld program:

public class HelloWorld {public static void main (String [] args) {System.out.println ("Hello world .. !!!"); }}

Poďme to teda skompilovať:

$ javac HelloWorld.java

Tu kompilátor vygeneruje a .trieda súbor pre náš program. Toto .trieda súbor bude vygenerovaný v rovnakom adresári. The .trieda súbor bude mať rovnaký názov ako názov triedy uvedený v programe Java. Toto .trieda súbor je spustiteľný.

V nasledujúcich častiach to spustíme .trieda súbor a pokúste sa pochopiť pravdepodobné dôvody chyby „Nepodarilo sa nájsť alebo načítať hlavnú triedu“.

3. Nesprávny názov triedy

Spustiť a .trieda súbor vygenerovaný kompilátorom Java, môžeme použiť nasledujúci príkaz:

java 

Teraz spustime náš program:

$ java helloworld Chyba: Nepodarilo sa nájsť alebo načítať helloworld hlavnej triedy

Áno, zlyhala chyba „Nepodarilo sa nájsť alebo načítať helloworld hlavnej triedy“.

Ako už bolo uvedené, kompilátor vygeneruje .trieda súbor s presne rovnakým názvom, aký je daný pre triedu Java v programe. Takže v našom prípade bude mať hlavná trieda názov HelloWorld, nie helloworld.

Skúsme to ešte raz so správnym veľkým písmenom:

$ java HelloWorld Ahoj svet .. !!!

Tentokrát to prebehlo úspešne.

3.1. Rozšírenie súboru

Na zostavenie programu Java musíme uviesť názov súboru s jeho príponou (.java):

$ javac HelloWorld.java

Ale spustiť a.trieda súboru, musíme uviesť názov triedy, nie názov súboru. Nie je teda potrebné poskytovať .trieda rozšírenie:

$ java HelloWorld.class Chyba: Nepodarilo sa nájsť alebo načítať hlavnú triedu HelloWorld.class

Takže opäť spustíme náš program so správnym názvom triedy:

$ java HelloWorld Ahoj svet .. !!!

4. Názvy balíkov Java

V Jave udržujeme podobné triedy pohromade v tom, čo nazývame a balíček.

Poďme HelloWorld triedy do com.baeldung balenie:

balík com.baeldung; public class HelloWorld {public static void main (String [] args) {System.out.println ("Hello world .. !!!"); }}

Teraz poďme zostaviť a spustiť aktualizované HelloWorld program ako predtým:

$ java HelloWorld Chyba: Nepodarilo sa nájsť alebo načítať hlavnú triedu HelloWorld

Opäť sa nám ale zobrazí chyba „Nepodarilo sa nájsť alebo načítať hlavnú triedu HelloWorld“!

Pokúsme sa pochopiť, čo nám tu chýbalo.

Ak chcete spustiť triedu Java, ktorá je v balíku, musíte zadať jej úplný názov. Takže v našom prípade HelloWorld plne kvalifikovaný názov je com.baeldung.HelloWorld.

Teraz, keď sme tvorili com.baeldung balíka sme vlastne vytvorili štruktúru priečinkov ako:

com / baeldung / HelloWorld.java

Najskôr sa pokúsime spustiť náš program z com / baeldung adresár:

$ java com.baeldung.HelloWorld Chyba: Nepodarilo sa nájsť alebo načítať hlavnú triedu com.baeldung.HelloWorld

Stále nie sme schopní spustiť náš program.

Tu, keď sme zadali úplný názov triedy com.baeldung.HelloWorld„Java sa pokúsila nájsť súbor HelloWorld.class v priečinku com / baeldungpod adresárom, z ktorého sme program spúšťali.

Ako sme už boli vo vnútri com / baeldung, Sa Java nepodarilo nájsť a spustiť server HelloWorld program.

Teraz sa vráťme späť do nadradeného priečinka a spustime ho:

$ java com.baeldung.HelloWorld Ahoj svet .. !!!

Áno, opäť sme schopní povedať „ahoj“ svetu.

5. Neplatná trieda cesty

Predtým, ako začneme, najskôr si uvedomme, čo je to classpath - je to množina tried dostupných pre náš momentálne bežiaci JVM.

Premennú classpath používame na to, aby sme JVM povedali, kde nájsť .trieda súbory v súborovom systéme.

Počas spustenia programu môžeme poskytnúť cestu k triede pomocou -classpath možnosť. príklad:

java -classpath / moje_programy / kompilované_triedy HelloWorld

Tu bude Java hľadať HelloWorld.class uložiť v /my_programs / compiled_classes priečinok, priečinok, ktorého meno sme práve vytvorili. Predvolene, premenná classpath je nastavená na „.“, čo znamená aktuálny adresár.

V predchádzajúcej časti sme zmenili náš adresár, aby sme spustili náš program. Ale čo ak to chceme spustiť z iného priečinka? Vtedy nám pomáha premenná classpath.

Spustenie nášho programu z adresára je com / baeldung môžeme jednoducho konštatovať, že naša cesta triedy je o dva adresáre vyššie - jeden pre každú časť balíka:

$ java -claspath ../../ com.baeldung.HelloWorld Ahoj svet .. !!!

„..“ tu predstavuje nadradený adresár. V našom prípade „../../“ predstavuje vrchol našej hierarchie balíkov.

6. Záver

V tomto tutoriáli sme sa dozvedeli pravdepodobné dôvody chyby „Could not find or load main class“.

Potom sme sa samozrejme naučili aj to, ako túto chybu vyriešiť.