Popravak: Ne mogu se pronaći ili učitati glavna klasa
Pogreška ' Ne mogu pronaći ili učitati glavnu klasu ' pojavljuje se kada se pomoću naredbe java u naredbenom retku pokrene program Java određivanjem naziva klase u terminalu. Razlog zašto se to događa uglavnom je posljedica greške u programiranju korisnika prilikom deklariranja klase.
Kao što je spomenuto prije, ova pogreška uglavnom nije povezana sa sustavom i korisnik pogriješi u nekoliko scenarija kako je prikazano u nastavku. Prije nego što krenemo naprijed, pretpostavljamo da imate osnovno znanje Java programskog jezika i kako on funkcionira.
Što uzrokuje pogrešku 'Ne mogu pronaći ili učitati glavnu klasu' u Javi?
Poruka "Ne mogu pronaći ili učitati glavnu klasu" znači da prvi korak Java motora dohvaća klasu za izvršenje nije uspio. Naredba java nije uspjela pronaći klasu u ispravnom direktoriju.
U nekim slučajevima morate dodati ispravan put datoteke i usmjeriti Java terminal na točno mjesto. Budući da naredbu izvodite iz terminala naredbenog retka, računalo ne zna gdje će se klasa nalaziti ili gdje se nalazi. U ciljanim IDE-ovima to nije problem jer IDE zadržava pokazivač usmjeren prema trenutnom radnom direktoriju.
Što je "java" sintaksa?
Prije nego što počnemo s rješavanjem problema zašto nam terminal vraća pogrešku prilikom pokušaja izvršenja, prvo moramo pogledati sintaksu naredbe. Ako ne upotrebljavate ispravnu sintaksu, neizbježno ćete se suočiti s ovom pogreškom.
Uobičajena sintaksa naredbe je ovako:
java [...] [...]
Ovdje je opcija naredbenog retka, potpuno kvalificirano ime klase Java i argument naredbenog retka koji se prosljeđuje u vašu aplikaciju kada se sastavlja cijeli paket.
Primjer valjane naredbe je:
java -Xmx100m com.acme.example.ListAppuals kevin strelice bart
Gornja naredba natjerat će naredbu java da izvrši sljedeće operacije:
- Pretražit će sastavljenu verziju klase ' com.acme.example.ListAppuals '.
- Nakon pretraživanja učitava klasu.
- Zatim, kad se učitava klasa, klasa će se tražiti za "glavnu" metodu s valjanim potpisom, modifikatorima i tipom povratka. Primjer glavne klase bio bi nešto poput:
javna statička praznina glavna (String [])
- Metoda će se pozivati argumentima 'kevin', 'strelice' i 'bart' kao string [].
Kako popraviti "Ne mogu pronaći ili učitati glavnu klasu"
1. rješenje: Provjera argumenata imena klase
Najčešća greška koju korisnici čine je da kao argument daju pogrešno ime klase (ili je ispravno ime klase pogrešan oblik). Budući da parametre deklariramo u naredbenom retku, velika je vjerojatnost da ćete argument imena razreda proslijediti u pogrešnom obliku. Ovdje ćemo navesti sve moguće scenarije u kojima možete pogriješiti.
- Pisanje jednostavnog naziva klase . Ako deklarirate klasu u paketu poput "com.acme.example", morate upotrijebiti puno ime razreda, uključujući paket u naredbi Java.
java com.acme.example.ListAppuals
umjesto
java ListAppuals
- Trebali biste deklarirati ime klase umjesto deklariranja imena datoteke ili putanje. Java ne dohvaća klasu ako za nju deklarirate naziv putanje / datoteke. Netočni unosi uključuju sljedeće:
java ListAppuals.class java com / acme / example / ListAppuals.class
- Kućište treba uzeti u obzir. Java naredbe razlikuju velika i mala slova, a ako pogriješite čak i jedno slovo, nećete moći učitati glavnu klasu. Primjer pogrešnih pogrešaka je:
java com.acme.example.listappuals
- Ne biste trebali deklarirati naziv izvorne datoteke . Kao što je ranije spomenuto, samo morate deklarirati klasu u ispravnom formatu punog naziva. Primjer pogreške je:
java ListAppuals.java
- Ova će se pogreška pojaviti i ako pogriješite pri tipkanju ili zaboravite u potpunosti napisati naziv klase .
Ako ste pogriješili u deklariranju imena klase, ispravite je i pokušajte pokrenuti program.
2. rješenje: Provjera klase
Ako ste ispravno proglasili ime klase, ali i dalje prikazuje pogrešku, vjerojatnost je da naredba java ne može pronaći navedeno ime klase na putu. Classpath je put na kojem Java Runtime traži datoteke resursa i klase. Klasični put možete lako postaviti pomoću dvije različite naredbe kao što je prikazano u nastavku:
C:> sdkTool -classpath classpath1; classpath2 ... C:> postavi CLASSPATH = classpath1; classpath2 ...
Da biste dobili bolji uvid u školsku stazu, trebali biste pogledati sljedeće dokumente.
Java komandna dokumentacija
Postavljanje učionice
3. rješenje: Provjera direktorija
Kad katalog deklarirate kao klasu puta, ona će uvijek odgovarati korijenu prostora imena. Na primjer, ako je „/ usr / local / acme / klase“ na putu klase, Java će tražiti klasu „com.acme.example.Appuals“. Tražit će klasu sa sljedećim imenom puta:
/usr/local/acme/classes/com/acme/example/Appuals.class
Dakle, u suštini, ako sljedeću adresu stavite u classpath, Java neće moći pronaći klasu:
/ Usr / local / vrhunac / klase / hr / vrhunac / Primjer
Trebali biste provjeriti i svoj poddirektorijum i provjerite odgovara li FQN-u. Ako je FQN vaše klase "com.acme.example.Appuals", Java će tražiti "Appuals.class" u direktoriju "com / acme / example".
Da bismo vam dali primjer, pretpostavimo sljedeći scenarij:
- Klasa koju želite pokrenuti je: com.acme.example.Appuals
- Cijeli put datoteke je: /usr/local/acme/classes/com/acme/example/Appuals.class
- Trenutačni radni imenik je: / usr / local / acme / klase / com / acme / example /
Tada bi se održavali sljedeći scenariji:
# pogrešno, potreban je FQN java Appuals # pogrešno, u trenutnoj radnoj mapi direktorija java com.acme.example.Appuals # nije u redu, postoji mapa `com / acme / example`, nije u redu, slično gornjem scenariju java -classpath. com.acme.example.Appuals # OK; postavljen je relativni klasni put java -classpath ../../ .. com.acme.example.Appuals # OK; postavljen je apsolutni klasni put java -classpath / usr / local / acme / klase com.acme.example.Appuals
Napomena: Klasa putanja mora uključivati i sve ostale klase (izvan sustava) koje vaše aplikacije trebaju.
4. rješenje: Provjera paketa klase
Ako su sva gore navedena rješenja istinita u vašem slučaju, morate provjeriti je li vaš izvorni kôd smješten u ispravnoj mapi. Također ste ispravno deklarirali paket . Ako svoj kod pokrenete s IDE-om, vjerovatno će vas obavijestiti u vezi s problemom. Međutim, u našem slučaju, budući da ga pokrećemo u naredbenom retku, greška će proći neopaženo i dobit ćete klasnu pogrešku u raspravi.