Поправяне: Не можах да намеря или заредя основния клас

Грешката „ Не можах да намеря или заредя основен клас “ възниква при използване на команда java в командния ред за стартиране на програма Java, като посочите името на класа в терминала. Причината, поради която това се случва, се дължи най-вече на грешката в програмирането на потребителя при деклариране на класа.

Не можах да намеря или заредя основен клас - команден ред на Java

Както споменахме преди, тази грешка най-вече не е свързана със системата и потребителят допуска грешка в няколко сценария, както е показано по-долу. Преди да продължим напред, предполагаме, че имате основни познания на езика за програмиране на Java и как работи.

Какво причинява грешката „Не мога да намеря или да заредя основен клас“ в Java?

Съобщението „Не можах да намеря или заредя основен клас“ означава, че първата стъпка от Java двигателя, извличащ класа за изпълнение, не е успешна. Командата java не успя да намери класа в правилната директория.

В някои случаи трябва да добавите правилния път към файла и да насочите Java терминала към правилното място. Тъй като изпълнявате командата от терминала на командния ред, компютърът не знае къде трябва да бъде намерен класът или къде се намира. В насочените IDE това не е проблем, тъй като IDE поддържа указател, насочен към текущата работна директория.

Какво е синтаксис „java“?

Преди да започнем да отстраняваме проблемите защо терминалът ни връща грешка при опит за изпълнение, първо трябва да разгледаме синтаксиса на командата. Ако не използвате правилния синтаксис, неизбежно ще се сблъскате с тази грешка.

Нормалният синтаксис на командата е нещо подобно:

 java [...] [...] 

Ето опция за команден ред, е напълно квалифицирано име на клас Java и е аргумент на команден ред, който се предава на вашето приложение, когато се компилира целият пакет.

Пример за валидна команда е:

 java -Xmx100m com.acme.example.ListAppuals kevin стрелки bart 

Горната команда ще накара командата java да извърши следните операции:

  • Той ще търси компилирана версия на класа ' com.acme.example.ListAppuals '.
  • След търсене ще зареди класа.
  • На следващо място, когато класът е зареден, класът ще бъде търсен за метод „main“ с валиден подпис, модификатори и тип връщане. Примерен основен клас би бил нещо като:
 публичен статичен невалиден главен (String []) 
  • Методът ще бъде извикан с аргументи 'kevin', 'стрелки' и 'bart' като низ [].

Как да поправим „Не можах да намеря или заредя основен клас“

Решение 1: Проверка на аргумента за име на клас

Най-честата грешка, която потребителите правят е, че предоставят грешно име на клас като аргумент (или правилното име на клас е грешна форма). Тъй като ние декларираме параметри в командния ред, има голяма вероятност да предадете аргумента за име на клас в грешна форма. Тук ще изброим всички възможни сценарии, при които можете да направите грешка.

  • Писане на просто име на клас . Ако декларирате класа в пакет като „com.acme.example“, трябва да използвате пълното име на клас, включително пакета в командата Java.
 java com.acme.example.ListAppuals 

вместо

 java ListAppuals 
  • Трябва да декларирате име на клас, вместо да декларирате име на файл или път. Java не извлича класа, ако декларирате име на път / име на файл за него. Неправилните записи включват следното:
 java ListAppuals.class java com / acme / example / ListAppuals.class 
  • Обвивката трябва да бъде взета под внимание. Командите на Java са чувствителни към регистъра и ако направите грешка дори от една буква, няма да можете да заредите основния клас. Пример за неправилни грешки са:
 java com.acme.example.listappuals 
  • Не трябва да декларирате име на изходен файл . Както споменахме по-рано, трябва само да декларирате класа в правилния пълен формат на име на клас. Пример за грешка е:
 java ListAppuals.java 
  • Тази грешка също ще възникне, ако направите грешка при въвеждане или забравите да напишете името на класа изцяло .

Ако сте направили някакви помия грешки при деклариране на името на клас, уверете се, че го поправите и след това опитайте да стартирате програмата.

Решение 2: Проверка на класния път

Ако сте декларирали името на клас правилно, но все още се показва грешката, има вероятност командата java да не може да намери посоченото име на клас в пътя. Classpath е път, по който Java по време на изпълнение търси файлове за ресурси и класове. Можете лесно да зададете класния път с помощта на две различни команди, както е показано по-долу:

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

За да получите повече информация относно класния път, трябва да разгледате следните документи.

Командна документация на Java

Задаване на класната пътека

Решение 3: Проверка на директорията

Когато декларирате директория като classpath, тя винаги ще съответства на корена на пространството от имена. Например, ако „/ usr / local / acme / класове“ е на classpath, тогава Java ще търси клас „com.acme.example.Appuals“. Той ще търси клас със следното име на пътя:

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

Така че по същество, ако поставите следния адрес в classpath, Java няма да може да намери класа:

 / ЮЕсАр / местни / Acme / класове / COM / Acme / например 

Трябва също да проверите поддиректорията си и да видите дали тя съвпада с FQN. Ако вашите класове FQN са „com.acme.example.Appuals“, тогава Java ще потърси „Appuals.class“ в директорията „com / acme / example“.

За да ви дадем пример, нека предположим следния сценарий:

  • Класът, който искате да стартирате, е: com.acme.example.Appuals
  • Пълният път на файла е: /usr/local/acme/classes/com/acme/example/Appuals.class
  • Текущата работна директория е: / usr / local / acme / класове / com / acme / пример /

Тогава биха спазили следните сценарии:

 # грешно, нужен е FQN java Appuals # грешно, няма папка `com / acme / example` в текущата работна директория java com.acme.example.Appuals # грешно, подобно на горния сценарий java -classpath. com.acme.example.Appuals # OK; зададен е относителен клас път java -classpath ../../ .. com.acme.example.Appuals # OK; зададен е абсолютен класов път java -classpath / usr / local / acme / класове com.acme.example.Appuals 

Забележка: Classpath трябва да включва и всички останали класове (несистемни), от които се нуждаят вашите приложения.

Решение 4: Проверка на класния пакет

Ако всички по-горе решения са верни във вашия случай, трябва да се уверите, че вашият изходен код е поставен в правилната папка. Също така правилно сте декларирали пакета . Ако стартирате кода си с IDE, той вероятно ще ви информира относно проблема. В нашия случай обаче, тъй като го изпълняваме в командния ред, грешката ще остане незабелязана и ще получите грешката в класа, която се обсъжда.

Интересни Статии