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

1. Въведение

Понякога, когато стартираме програма на Java, може да видим „Не може да се намери или зареди основен клас“. Лесно е да се отгатне причината: JVM не успя да намери основния клас и даде тази грешка. Но защо не може?

В този урок ще обсъдим вероятните причини за неуспех да намерим основния клас. Също така ще видим как да ги поправим.

2. Примерна програма

Ще започнем с програма HelloWorld :

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } }

Сега нека го компилираме:

$ javac HelloWorld.java

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

В следващите раздели ще стартираме този .class файл и ще се опитаме да разберем вероятните причини за грешка „Не можах да намеря или заредя основния клас“.

3. Грешно име на класа

За да стартираме .class файл, генериран от Java компилатор, можем да използваме командата по-долу:

java 

Сега, нека стартираме нашата програма:

$ java helloworld Error: Could not find or load main class helloworld

Да, не успя с грешката „Не можах да намеря или заредя основния клас helloworld“.

Както беше обсъдено по-рано, компилаторът ще генерира .class файла с точно същото име, дадено на класа Java в програмата . Така че в нашия случай основният клас ще носи името HelloWorld , а не helloworld .

Нека опитаме още веднъж с правилен корпус:

$ java HelloWorld Hello world..!!!

Този път течеше успешно.

3.1. Разширение на файл

За да компилираме Java програма, трябва да предоставим името на файла с неговото разширение (. Java ):

$ javac HelloWorld.java

Но за да стартирате a. файл на класа , трябва да предоставим името на класа, а не името на файла. Така че няма нужда да се предоставя разширението .class :

$ java HelloWorld.class Error: Could not find or load main class HelloWorld.class

И така, нека отново стартираме нашата програма, използвайки правилното име на класа:

$ java HelloWorld Hello world..!!!

4. Имена на Java пакети

В Java поддържаме подобни класове заедно в това, което наричаме пакет .

Нека преместим класа HelloWorld в пакета com.baeldung :

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

Сега нека компилираме и стартираме актуализираната програма HelloWorld както преди:

$ java HelloWorld Error: Could not find or load main class HelloWorld

Но отново получаваме грешката „Не можах да намеря или заредя основния клас HelloWorld“!

Нека се опитаме да разберем какво пропуснахме тук.

За да стартираме клас Java, който е в пакет, трябва да предоставим пълното му име . Така че в нашия случай пълното име на HelloWorld е com.baeldung.HelloWorld .

Сега, когато създадохме пакета com.baeldung , всъщност създадохме структура на папки като:

com/baeldung/HelloWorld.java

Първо, нека се опитаме да стартираме нашата програма от директорията com / baeldung :

$ java com.baeldung.HelloWorld Error: Could not find or load main class com.baeldung.HelloWorld

Все пак не сме в състояние да стартираме нашата програма.

Тук, когато посочихме напълно квалифицираното име на класа com.baeldung.HelloWorld , Java се опита да намери файла HelloWorld.class в com / baeldung , в директорията, откъдето стартирахме програмата.

Тъй като вече бяхме в com / baeldung , Java не успя да намери и стартира програмата HelloWorld .

Сега да се върнем към родителската папка и да я стартираме:

$ java com.baeldung.HelloWorld Hello world..!!!

Да, отново сме в състояние да кажем „Здравей“ на света.

5. Невалиден път на класа

Преди да продължим напред, нека първо разберем какъв е пътят на класовете - това е наборът от класове, достъпни за текущата ни JVM.

Използваме променливата classpath, за да кажем на JVM къде да намери .class файловете във файловата система.

Докато изпълняваме програма, ние можем да предоставим опцията classpath, използвайки -classpath . пример:

java -classpath /my_programs/compiled_classes HelloWorld

Тук Java ще търси файл HelloWorld.class в папката / my_programs / compiled_classes, папка, чието име току-що измислихме. По подразбиране променливата на classpath е зададена на „.“, Което означава текущата директория.

В горния раздел сменихме нашата директория, за да стартираме нашата програма. Но какво, ако искаме да го стартираме от друга папка? Тогава променливата classpath ни помага.

За да стартираме нашата програма от директорията е com / baeldung, можем просто да заявим, че нашият път на класа е две директории нагоре - по една за всяка част на пакета:

$ java -claspath ../../ com.baeldung.HelloWorld Hello world..!!!

Тук „..“ представлява родителската директория. В нашия случай “../../” представлява върха на нашата йерархия на пакета.

6. Заключение

В този урок научихме вероятните причини за грешката „Не можах да намеря или заредя основния клас“.

След това, разбира се, научихме и как да разрешим тази грешка.