Nije moguće pronaći ili učitati pogrešku glavne klase

1. Uvod

Povremeno kad pokrenemo Java program, mogli bismo vidjeti "Nije moguće pronaći ili učitati glavnu klasu". Lako je pogoditi razlog: JVM nije uspio pronaći glavnu klasu i dao je ovu pogrešku. Ali zašto nije mogao?

U ovom uputstvu razmotrit ćemo vjerojatne razloge neuspjeha u pronalaženju glavne klase. Također ćemo vidjeti kako ih popraviti.

2. Uzorak programa

Započet ćemo s Pozdrav svijete program:

javna klasa HelloWorld {javna statička void glavna (String [] args) {System.out.println ("Hello world .. !!!"); }}

Sad, kompajlirajmo:

$ javac HelloWorld.java

Ovdje će prevoditelj generirati .razred datoteka za naš program. Ovaj .razred datoteka će se generirati u istom direktoriju. The .razred datoteka će imati isto ime kao naziv klase naveden u programu Java. Ovaj .razred datoteka je izvršna.

U sljedećim ćemo odjeljcima pokrenuti ovo .razred datoteku i pokušajte razumjeti vjerojatne razloge pogreške "Nije moguće pronaći ili učitati glavnu klasu".

3. Pogrešan naziv klase

Za pokretanje a .razred datoteku koju generira Java kompajler, možemo koristiti naredbu ispod:

Java 

Ajmo sada pokrenuti naš program:

Pogreška $ java helloworld: Nije moguće pronaći ili učitati helloworld glavne klase

Da, nije uspjelo s pogreškom "Ne mogu pronaći niti učitati helloworld glavne klase".

Kao što je ranije spomenuto, kompajler će generirati .razred datoteku s potpuno istim imenom dodijeljenu klasi Java u programu. Tako će u našem slučaju glavna klasa imati ime Pozdrav svijete, nije Pozdrav svijete.

Pokušajmo još jednom s ispravnim kućištem:

$ java HelloWorld Pozdrav svijete .. !!!

Ovaj put je uspješno trčao.

3.1. Proširenje datoteke

Da bismo kompilirali Java program, moramo dati naziv datoteke s njenim nastavkom (.Java):

$ javac HelloWorld.java

Ali za pokretanje a.razred datoteku, moramo navesti naziv klase, a ne naziv datoteke. Dakle, nema potrebe za pružanjem .razred produžetak:

$ java Pogreška HelloWorld.class: Ne mogu pronaći ili učitati glavnu klasu HelloWorld.class

Dakle, opet, pokrenimo naš program koristeći ispravan naziv klase:

$ java HelloWorld Pozdrav svijete .. !!!

4. Nazivi Java paketa

U Javi držimo slične razrede zajedno u onome što nazivamo a paket.

Krenimo Pozdrav svijete razred u com.baeldung paket:

paket com.baeldung; javna klasa HelloWorld {public static void main (String [] args) {System.out.println ("Hello world .. !!!"); }}

Sada, kompajlirajmo i pokrenimo ažurirano Pozdrav svijete program kao prije:

$ java Pogreška HelloWorld: Nije moguće pronaći ili učitati glavnu klasu HelloWorld

Ali opet dobivamo pogrešku "Ne mogu pronaći ili učitati glavnu klasu HelloWorld"!

Pokušajmo shvatiti što smo ovdje propustili.

Da bismo pokrenuli Java klasu koja se nalazi u paketu, moramo navesti njezino potpuno kvalificirano ime. U našem slučaju, HelloWorld's potpuno kvalificirano ime je com.baeldung.HelloWorld.

Sad, kad smo stvorili com.baeldung paket, ustvari smo stvorili strukturu mape poput:

com / baeldung / HelloWorld.java

Prvo, pokušajmo pokrenuti naš program s com / baeldung imenik:

$ java greška com.baeldung.HelloWorld: Nije moguće pronaći ili učitati glavnu klasu com.baeldung.HelloWorld

Ipak, nismo u mogućnosti pokrenuti naš program.

Ovdje smo naveli potpuno kvalificirano ime klase com.baeldung.HelloWorld, Java je pokušala pronaći datoteku HelloWorld.class u com / baeldung, u direktoriju odakle smo izvodili program.

Kako smo već bili unutra com / baeldung, Java nije uspjela pronaći i pokrenuti Pozdrav svijete program.

Sada se vratimo u nadređenu mapu i pokrenimo je:

$ java com.baeldung.HelloWorld Pozdrav svijete .. !!!

Da, opet smo u stanju reći svijetu „Zdravo“.

5. Nevaljana put predavanja

Prije nego što nastavimo, prvo shvatimo što je put predavanja - to je skup klasa dostupan našem JVM-u koji se trenutno izvodi.

Koristimo varijablu classpath da JVM-u kažemo gdje pronaći .razred datoteke na datotečnom sustavu.

Tijekom izvođenja programa možemo pružiti put do klase pomoću -razredna staza opcija. primjer:

java -classpath / my_programs / compiled_classes HelloWorld

Ovdje će Java tražiti HelloWorld.class uloži u /my_programs / compiled_classes mapa, mapa čije smo ime upravo izmislili. Prema zadanim postavkama, varijabla classpath postavljena je na ".", što znači trenutni direktorij.

U gornjem odjeljku promijenili smo naš direktorij kako bismo pokrenuli naš program. Ali što ako ga želimo pokrenuti iz neke druge mape? Tada nam pomaže varijabla classpath.

Za pokretanje našeg programa iz direktorija je com / baeldung možemo jednostavno reći da je naša put predavanja dva direktorija gore - po jedan za svaki dio paketa:

$ java -claspath ../../ com.baeldung.HelloWorld Pozdrav svijete .. !!!

Ovdje ".." predstavlja nadređeni direktorij. U našem slučaju "../../" predstavlja vrh naše hijerarhije paketa.

6. Zaključak

U ovom smo priručniku saznali vjerojatne razloge pogreške "Nije moguće pronaći ili učitati glavnu klasu".

Tada smo, naravno, također naučili kako riješiti ovu pogrešku.