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

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

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

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

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

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

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

Какво представлява синтаксисът „java“?

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

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

 java [...] [...]

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

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

java -Xmx100m com.acme.example.ListAppuals кевин стрелки барт

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

  • Той ще търси компилирана версия на класа ' com.acme.example.ListAppuals '.
  • След търсене ще зареди класа.
  • След това, когато класът се зареди, класът ще бъде търсен за „основен“ метод с валиден подпис, модификатори и тип връщане. Примерен основен клас ще бъде нещо като:
публична статична void main (String [])
  • Методът ще бъде извикан с аргументи 'kevin', 'arrows' и '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 не може да намери посоченото име на класа в пътя. Пътът на класовете е път, по който изпълнението на Java търси файлове с ресурси и класове. Можете лесно да зададете пътя на класа, като използвате две различни команди, както е показано по-долу:

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

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

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

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

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

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

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

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

/ usr / local / acme / classes / 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
  • В текущата работна директория е: / ЮЕсАр / местни / Acme / класове / COM / Acme / например /

Тогава ще се държат следните сценарии:

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

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

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

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