A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
tl-translations / lang_ru_RU.properties
- Go to file T
- Go to line L
- Copy path
- Copy permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cannot retrieve contributors at this time
979 lines (953 sloc) 108 KB
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents Copy raw contents
Copy raw contents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
- Copy lines
- Copy permalink
- View git blame
- Reference in new issue
Источник: github.com
Вылеты Майнкрафта. Исправление ошибок JAVA. Простые способы.
Не удалось найти или загрузить ошибку основного класса
Изучите причины ошибки “Не удалось найти или загрузить основной класс” и узнайте, как их избежать.
1. введение
Иногда, когда мы запускаем программу Java, мы можем увидеть “Не удалось найти или загрузить основной класс”. Легко догадаться о причине: JVM не смогла найти основной класс и выдала эту ошибку. Но почему бы и нет?
Дальнейшее чтение:
Как исправить java.lang.UnsupportedClassVersionError
Объясненный метод Java main()
В этом уроке мы обсудим вероятные причины неудачного поиска основного класса. Кроме того, мы посмотрим, как их исправить.
2. Пример Программы
Мы начнем с Hello World программы:
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 в программе . Таким образом, в нашем случае основной класс будет иметь имя Hello World , а не hello world .
Давайте попробуем еще раз с правильным корпусом:
$ java HelloWorld Hello world.
На этот раз все прошло успешно.
3.1. Расширение файла
Чтобы скомпилировать программу на Java, мы должны указать имя файла с его расширением (. java ):
$ javac HelloWorld.java
Но чтобы запустить . class file, нам нужно указать имя класса, а не имя файла. Таким образом, нет необходимости предоставлять расширение .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. «); >>
Теперь давайте скомпилируем и запустим обновленную программу Hello World , как и раньше:
$ java HelloWorld Error: Could not find or load main class HelloWorld
Но снова мы получаем ошибку “Не удалось найти или загрузить основной класс HelloWorld”!
Давайте попробуем понять, что же мы здесь упустили.
Чтобы запустить класс Java, который находится в пакете, мы должны указать его полное имя . Поэтому в нашем случае Hello World полное имя com.baeldung.Адский мир .
Теперь, когда мы создали com.baeldung package, мы фактически создали структуру папок, такую как:
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 . пример:
java -classpath /my_programs/compiled_classes HelloWorld
Здесь Java будет искать HelloWorld.class файл в/ my_programs/compiled_classes папке, имя которой мы только что придумали. По умолчанию переменная пути к классу имеет значение”.”, что означает текущий каталог.
В приведенном выше разделе мы изменили наш каталог для запуска нашей программы. Но что, если мы захотим запустить его из какой-то другой папки? Вот когда переменная classpath помогает нам.
Чтобы запустить нашу программу из каталога com/baeldung , мы можем просто указать, что наш путь к классу состоит из двух каталогов – по одному для каждой части пакета:
$ java -claspath ../../ com.baeldung.HelloWorld Hello world.
Здесь “..” представляет родительский каталог. В нашем случае “../../” представляет собой вершину иерархии пакетов.
6. Заключение
В этом уроке мы узнали вероятные причины ошибки “Не удалось найти или загрузить основной класс”.
Затем, конечно, мы также узнали, как решить эту ошибку.
Читайте ещё по теме:
Источник: javascopes.com
Что означает «не удалось найти или загрузить основной класс»?
общей проблемой, с которой сталкиваются новые разработчики Java, является то, что их программы не запускаются с сообщением об ошибке: Could not find or load main class .
что это значит, что вызывает это и как вы должны это исправить?
автор: Stephen C
30 ответов
на java синтаксис
прежде всего, вам нужно понять правильный способ запуска программы с помощью java (или javaw команды).
обычный синтаксис 1 это:
java [ . ] [ . ]
здесь является опцией командной строки (начиная с символа» -«), является полным именем класса Java и является произвольным аргументом командной строки, который передается вашему приложение.
1 — существует второй синтаксис для «исполняемых» файлов JAR, которые я опишу внизу.
полное имя (FQN) для класса обычно пишется так же, как и в исходном коде Java; например
packagename.packagename2.packagename3.ClassName
обратите внимание, что термин полное наименование — стандартная терминология Java . не то, что я просто придумал, чтобы запутать вас: -)
вот пример должно выглядеть так:
java -Xmx100m com.acme.example.ListUsers fred joe bert
вышеизложенное приведет к java команда, чтобы сделать следующее:
- Поиск скомпилированной версии com.acme.example.ListUsers класса.
- загрузить класс.
- проверьте, что класс имеет main метод подпись, тип возвращаемого и модификаторы дано public static void main(String[]) . (Обратите внимание, что имя аргумента метода -не часть подпись.)
- вызовите этот метод, передав ему аргументы командной строки («fred»,» joe»,» bert») как String[] .
причины, по которым Java не может найти класс
когда вы получаете сообщение » не удалось найти или загрузить основной класс . — это значит, что первый шаг провалился. The java команда не смогла найти класс. И действительно,». «в сообщении будет полное имя класса это java смотрит для.
так почему он не может найти класс?
Причина #1 — Вы допустили ошибку с аргументом classname
первой вероятной причиной является то, что вы, возможно, указали неправильное имя класса. (Или. .. правильное название класса, но в неправильной форме.) Учитывая приведенный выше пример, здесь разнообразие неправильные способы чтобы указать имя класса:
-
Пример № 1 — простой класс имя:
java ListUser
когда класс объявлен в пакете, таком как com.acme.example , то вы должны использовать полное имя класса в том числе имя пакета в , например,
java com.acme.example.ListUser
java ListUser.class java com/acme/example/ListUser.class
java com.acme.example.listuser
java com.acme.example.mistuser
java ListUser.java
java lots of arguments
Причина #2-неверно указан путь к классам приложения
второй вероятной причиной является то, что имя класса правильно, но java команда не может найти класс. Чтобы понять это, вам нужно понять концепцию «путь класса.» Это объясняется хорошо по документации Oracle:
- на java командная документации
- установка пути к классам.
- Учебник Java -путь и путь к классам
так . если вы правильно указали имя класса, следующее, что нужно проверить, — это то, что вы указали путь к классу правильно:
- прочитайте три документа, связанные выше. (Утвердительный ответ. .. читать их. Важно, чтобы программист Java понимает по крайней мере, основы того, как работают механизмы Java classpath.)
- посмотрите на командную строку и / или переменную среды CLASSPATH, которая действует при запуске . Проверьте правильность имен каталогов и файлов JAR.
- если есть относительные пути в пути к классам проверьте, правильно ли они разрешены . из текущего каталога, который действует при запуске .
- проверьте, что класс (упомянутый в сообщении об ошибке) может быть расположен на эффективное классов.
- обратите внимание, что синтаксис пути к классам разные для Windows против Linux и Mac OS. (Разделитель пути к классам — ; на Windows и : на другие.)
причина № 2а — неправильный каталог в classpath
когда вы помещаете каталог в путь к классам, он условно соответствует корню полного пространства имен. Классы расположены в структуре каталогов под этим корнем,путем сопоставления полного имени с именем пути. Так, например, если «/ usr/local/acme / classes» находится на пути к классу, то когда JVM ищет класс с именем com.acme.example.Foon , он будет искать «.class » файл с этим именем пути:
/usr/local/acme/classes/com/acme/example/Foon.class
если бы вы поставили «/ usr/local/acme/classes/com/acme / example» на путь к классам, то JVM не смог бы найти класс.
причина #2b-путь подкаталога не соответствует FQN
если ваши классы FQN com.acme.example.Foon , тогда JVM будет искать » Foon.класс «в каталоге» com/acme / example»:
- если ваша структура каталогов не соответствует пакету именование согласно приведенному выше шаблону, JVM не найдет ваш класс.
- при попытке переименовать класс, перемещая его, это также потерпит неудачу . но исключение stacktrace будет другим.
чтобы привести конкретный пример, предположим, что:
- вы хотите работать com.acme.example.Foon класса,
- полный путь к файлу /usr/local/acme/classes/com/acme/example/Foon.class ,
- ваш текущий рабочий каталог /usr/local/acme/classes/com/acme/example/ ,
# wrong, FQN is needed java Foon # wrong, there is no `com/acme/example` folder in the current working directory java com.acme.example.Foon # wrong, similar to above java -classpath . com.acme.example.Foon # fine; relative classpath set java -classpath ../../.. com.acme.example.Foon # fine; absolute classpath set java -classpath /usr/local/acme/classes com.acme.example.Foon
- на -classpath опция может быть сокращена до -cp в большинстве версий Java. Проверьте соответствующие записи вручную для java , javac и так далее.
- тщательно подумайте при выборе между абсолютными и относительными путями в classpaths. Помните, что относительный путь может «сломаться», если текущий каталог изменится.
причина #2c — зависимости отсутствует в classpath
путь к классам должен включать все другое (несистемные) классы, от которых зависит ваше приложение. (Системные классы расположены автоматически, и вам редко нужно беспокоиться об этом.) Для правильной загрузки основного класса JVM необходимо найти:
- сам класс.
- все классы и интерфейсы в иерархии суперкласса (например, см. этот вопрос)
- все классы и интерфейсы, на которые ссылаются с помощью объявлений переменных или переменных, или вызова метода или выражений доступа к полю.
(Примечание: спецификации JLS и JVM позволяют некоторой области для JVM загружать классы «лениво», и это может повлиять на то, когда создается исключение classloader.)
Причина № 3 — класс был объявлен в неправильном пакет
иногда случается, что кто-то ставит файл исходного кода в неправильная папка в дереве исходного кода, или они оставляют package декларации. Если вы сделаете это в IDE, компилятор IDE немедленно сообщит вам об этом. Аналогично, если вы используете приличный инструмент сборки Java, инструмент будет работать javac таким образом, чтобы обнаружить проблему. Однако, если вы создадите свой Java-код вручную, вы можете сделать это таким образом, чтобы компилятор не заметил проблему, а в результате «.класс » файл не находится в том месте, где вы ожидайте этого.
все еще не можете найти проблему?
там много вещей, чтобы проверить, и это легко пропустить что-то. Попробуйте добавить до java командная строка (как первое после java ). Он выведет различные вещи о загрузке класса, и это может предложить вам подсказки о том, в чем настоящая проблема.
кроме того, рассмотрите возможные проблемы, вызванные копированием и вставкой невидимых или не-ASCII символов с веб-сайтов, документы и так далее. И рассматривать «homoglyphs», две буквы или символы выглядят одинаково . но нет.
на java -jar синтаксис
альтернативный синтаксис, используемый для «исполняемых» файлов JAR, выглядит следующим образом:
java [ . ] -jar [ . ]
java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred
в этом случае имя класса точки входа (т. е. com.acme.example.ListUser ) и путь к классам указаны в манифесте файла JAR.
IDEs
A типичная Java IDE поддерживает запуск Java-приложений в самой IDE JVM или в дочерней JVM. Это вообще иммунный от этого конкретного исключения, потому что IDE использует свои собственные механизмы для построения пути к классам среды выполнения, определения основного класса и создания java командная строка.
однако это исключение все еще возможно, если вы делаете что-то за спиной IDE. Например, если вы ранее настроили приложение Launcher для вашего Java-приложения в Eclipse, а затем вы переместили файл JAR, содержащий класс «main», в другое место в файловой системе не говоря Eclipse, Eclipse невольно запустит JVM с неправильным путем к классам.
короче говоря, если вы получаете эту проблему в IDE, проверьте такие вещи, как устаревшее состояние IDE, сломанные ссылки на проекты или сломанные конфигурации запуска.
также возможно, что IDE просто запутается. интегрированная среда разработки чрезвычайно сложные части программного обеспечения, состоящие из многих взаимодействующих частей. Многие из этих частей используют различные стратегии кэширования, чтобы сделать IDE в целом отзывчивой. Иногда они могут пойти не так, и одним из возможных симптомов являются проблемы при запуске приложений. Если вы подозреваете, что это может произойти, стоит перезапустить IDE.
Другие Ссылки
- из учебников Oracle Java -общие проблемы (и их Решения)
Источник: askdev.ru