Oprava: Nelze najít ani načíst hlavní třídu

Při použití příkazu java v příkazovém řádku k spuštění programu Java zadáním názvu třídy v terminálu dojde k chybě „ Nelze najít nebo načíst hlavní třídu “. Důvod, proč k tomu dochází, je většinou způsoben chybou programování uživatele při deklarování třídy.

Nelze najít nebo načíst hlavní příkazový řádek Java

Jak je uvedeno výše, tato chyba většinou nesouvisí se systémem a uživatel udělá chybu v několika scénářích, jak je uvedeno níže. Než se pohneme kupředu, předpokládáme, že máte základní znalosti programovacího jazyka Java a jak to funguje.

Co způsobuje chybu „Nelze najít nebo načíst hlavní třídu“ v Javě?

Zpráva „Nelze najít nebo načíst hlavní třídu“ znamená, že první krok modulu Java vyvolávající třídu pro provedení selhal. Příkaz java nebyl schopen najít třídu ve správném adresáři.

V některých případech musíte přidat správnou cestu k souboru a nasměrovat terminál Java na správné místo. Protože provádíte příkaz z terminálu příkazového řádku, počítač neví, kde má být třída nalezena nebo kde je umístěna. U cílených IDE to není problém, protože IDE udržuje ukazatel směřující k aktuálnímu pracovnímu adresáři.

Co je syntaxe „java“?

Než začneme řešit, proč nám terminál při pokusu o provedení vrací chybu, musíme se nejprve podívat na syntaxi příkazu. Pokud nepoužíváte správnou syntaxi, nevyhnutelně budete čelit této chybě.

Normální syntaxe příkazu je něco podobného:

 java [...] [...] 

Zde je možnost příkazového řádku, je plně kvalifikovaný název třídy Java a je argumentem příkazového řádku, který je předán vaší aplikaci při kompilaci celého balíčku.

Příkladem platného příkazu je:

 java -Xmx100m com.acme.example.ListAppuals kevin šipky bart 

Výše uvedený příkaz způsobí, že příkaz java provede následující operace:

  • Vyhledá kompilovanou verzi třídy ' com.acme.example.ListAppuals '.
  • Po prohledání načte třídu.
  • Poté, co je třída načtena, bude třída prohledána „hlavní“ metoda s platným podpisem, modifikátory a návratovým typem. Ukázková hlavní třída by byla něco jako:
 public static void main (String []) 
  • Metoda bude volána s argumenty 'kevin', 'šipkami' a 'bart' jako řetězec [].

Jak opravit 'Nelze najít nebo načíst hlavní třídu'

Řešení 1: Kontrola argumentu názvu třídy

Nejčastější chybou, kterou uživatelé dělají, je to, že jako argument uvádějí nesprávný název třídy (nebo správný název třídy je nesprávný tvar). Protože deklarujeme parametry na příkazovém řádku, je vysoce pravděpodobné, že argument názvu třídy předáte v nesprávné formě. Zde uvedeme všechny možné scénáře, ve kterých můžete udělat chybu.

  • Psaní jednoduchého názvu třídy . Pokud deklarujete třídu v balíčku, jako je 'com.acme.example', musíte v příkazu Java použít celé jméno třídy včetně balíčku.
 java com.acme.example.ListAppuals 

namísto

 java ListAppuals 
  • Místo deklarace názvu souboru nebo cesty byste měli deklarovat jméno třídy. Java nenahraje třídu, pokud pro ni deklarujete cestu / název souboru. Mezi nesprávné položky patří následující:
 java ListAppuals.class java com / acme / example / ListAppuals.class 
  • Je třeba vzít v úvahu pouzdro . Příkazy Java rozlišují velká a malá písmena a pokud uděláte chybu pouze s jedním písmenem, nebudete moci načíst hlavní třídu. Příkladem nesprávných chyb jsou:
 java com.acme.example.listappuals 
  • Neměli byste deklarovat zdrojový název souboru . Jak již bylo zmíněno dříve, stačí deklarovat třídu ve správném úplném formátu názvu třídy. Příklad chyby je:
 java ListAppuals.java 
  • K této chybě také dojde, pokud uděláte chybu při psaní nebo zapomenete celý název třídy napsat .

Pokud jste při deklaraci názvu třídy udělali nějaké nedbalé chyby, ujistěte se, že jste to opravili a zkuste spustit program.

Řešení 2: Kontrola cesty po třídě

Pokud jste správně deklarovali název třídy, ale stále se zobrazuje chyba, je pravděpodobné, že příkaz java nenajde zadaný název třídy na cestě. Cesta třídy je cesta, kde Java runtime hledá zdroje a soubory tříd. Cesta třídy můžete snadno nastavit pomocí dvou různých příkazů, jak je uvedeno níže:

 C:> sdkTool -classpath classpath1; classpath2 ... C:> set CLASSPATH = classpath1; classpath2 ... 

Chcete-li získat lepší přehled o cestě po třídě, měli byste se podívat na následující dokumenty.

Dokumentace příkazů Java

Nastavení cesty třídy

Řešení 3: Kontrola adresáře

Když deklarujete adresář jako cestu třídy, bude vždy odpovídat kořeni oboru názvů. Pokud je například na třídě cesta „/ usr / local / acme / classes“, Java vyhledá třídu „com.acme.example.Appuals“. Bude hledat třídu s následující cestou:

 /usr/local/acme/classes/com/acme/example/Appuals.class 

Takže pokud do cesty do třídy vložíte následující adresu, Java nebude moci tuto třídu najít:

 / usr / local / acme / classes / com / acme / example 

Měli byste také zkontrolovat svůj podadresář a zjistit, zda odpovídá FQN. Pokud je vaše třída FQN „com.acme.example.Appuals“, Java vyhledá „Appuals.class“ v adresáři „com / acme / example“.

Příklad: Předpokládejme následující situaci:

  • Třída, kterou chcete spustit, je: com.acme.example.Appuals
  • Úplná cesta k souboru je: /usr/local/acme/classes/com/acme/example/Appuals.class
  • Aktuální pracovní adresář je: / usr / local / acme / classes / com / acme / example /

Pak by se držely následující scénáře:

 # špatně, FQN je potřeba java Appuals # špatně, v aktuálním pracovním adresáři java com.acme.example.Appuals # špatná není složka `com / acme / example`, podobně jako výše uvedený scénář java -classpath. com.acme.example.Appuals # OK; relativní cesta třídy je nastavena java -classpath ../../ .. com.acme.example.Appuals # OK; je nastavena absolutní cesta třídy java -classpath / usr / local / acme / classes com.acme.example.Appuals 

Poznámka: Cesta třídy musí zahrnovat také všechny ostatní třídy (nesystémové), které vaše aplikace potřebuje.

Řešení 4: Kontrola balíčku třídy

Pokud jsou všechna výše uvedená řešení ve vašem případě pravdivá, musíte se ujistit, že váš zdrojový kód je umístěn ve správné složce. Také jste správně deklarovali balíček . Pokud spustíte kód pomocí IDE, pravděpodobně vás bude o problému informovat. V našem případě však, protože ji spouštíme v příkazovém řádku, chyba zůstane bez povšimnutí a chyba třídy bude předmětem diskuse.

Zajímavé Články