Класс Java отлично работает в IntelliJ, но не из командной строки

Я скомпилировал и запустил простой файл Java в IntelliJ. Он содержит основной метод и еще один небольшой статический метод. Он работает отлично каждый раз.

Однако, когда я пытаюсь запустить команду java в файле .class с терминала, я получаю следующее:

Ошибка: не удалось найти или загрузить основной класс [имя файла здесь]

Что я делаю неправильно?

0
задан 23 July 2017 в 04:36

3 ответа

Вам нужно запустить java YourClassName, а не java YourClassName.class.

Проблема в том, что вы включаете суффикс .class в команде.

Есть несколько другие возможные объяснения, так как вы не указали конкретную команду, которую вы выполнили. Возможно, что вы используете команду откуда-то, кроме местоположения вашего файла .class, и не даете ему полного пути или что вы неправильно написали его имя и т. Д. Однако, включая ложный .class суффикс, который команда java не ожидает, является наиболее распространенной причиной этой проблемы.

Предположим, что класс, содержащий точку входа вашей программы (main() ) называется Foo, а его исходный код находился в файле в текущем каталоге с именем Foo.java, поэтому вы скомпилировали свою программу, запустив javac Foo.java. Поскольку Foo - это имя класса, это создает файл с именем Foo.class, содержащий скомпилированный байт-код Java для этого класса.

Чтобы запустить программу, вы должны запустить:

java Foo

Ваше описание заставляет это звучать, как будто вы используете java Foo.class. Это обычный камнем преткновения для пользователей, которые используют команду java для запуска файлов .class в первый раз (независимо от того, программируются они на Java или просто запускают файлы .class, предоставленные кем-то другим).

java Foo.class не будет работать; команда java интерпретирует свой аргумент как имя класса, содержащего точку входа, а не имя файла. Когда вы запустите java Foo, он знает, как искать файл с именем Foo.class.

1
ответ дан 22 May 2018 в 20:17

Вам нужно запустить java YourClassName, а не java YourClassName.class.

Проблема в том, что вы включаете суффикс .class в команде.

Есть несколько другие возможные объяснения, так как вы не указали конкретную команду, которую вы выполнили. Возможно, что вы используете команду откуда-то, кроме местоположения вашего файла .class, и не даете ему полного пути или что вы неправильно написали его имя и т. Д. Однако, включая ложный .class суффикс, который команда java не ожидает, является наиболее распространенной причиной этой проблемы.

Предположим, что класс, содержащий точку входа вашей программы (main() ) называется Foo, а его исходный код находился в файле в текущем каталоге с именем Foo.java, поэтому вы скомпилировали свою программу, запустив javac Foo.java. Поскольку Foo - это имя класса, это создает файл с именем Foo.class, содержащий скомпилированный байт-код Java для этого класса.

Чтобы запустить программу, вы должны запустить:

java Foo

Ваше описание заставляет это звучать, как будто вы используете java Foo.class. Это обычный камнем преткновения для пользователей, которые используют команду java для запуска файлов .class в первый раз (независимо от того, программируются они на Java или просто запускают файлы .class, предоставленные кем-то другим).

java Foo.class не будет работать; команда java интерпретирует свой аргумент как имя класса, содержащего точку входа, а не имя файла. Когда вы запустите java Foo, он знает, как искать файл с именем Foo.class.

1
ответ дан 18 July 2018 в 09:51

Вам нужно запустить java YourClassName, а не java YourClassName.class.

Проблема в том, что вы включаете суффикс .class в команде.

Есть несколько другие возможные объяснения, так как вы не указали конкретную команду, которую вы выполнили. Возможно, что вы используете команду откуда-то, кроме местоположения вашего файла .class, и не даете ему полного пути или что вы неправильно написали его имя и т. Д. Однако, включая ложный .class суффикс, который команда java не ожидает, является наиболее распространенной причиной этой проблемы.

Предположим, что класс, содержащий точку входа вашей программы (main() ) называется Foo, а его исходный код находился в файле в текущем каталоге с именем Foo.java, поэтому вы скомпилировали свою программу, запустив javac Foo.java. Поскольку Foo - это имя класса, это создает файл с именем Foo.class, содержащий скомпилированный байт-код Java для этого класса.

Чтобы запустить программу, вы должны запустить:

java Foo

Ваше описание заставляет это звучать, как будто вы используете java Foo.class. Это обычный камнем преткновения для пользователей, которые используют команду java для запуска файлов .class в первый раз (независимо от того, программируются они на Java или просто запускают файлы .class, предоставленные кем-то другим).

java Foo.class не будет работать; команда java интерпретирует свой аргумент как имя класса, содержащего точку входа, а не имя файла. Когда вы запустите java Foo, он знает, как искать файл с именем Foo.class.

1
ответ дан 24 July 2018 в 19:27

Другие вопросы по тегам:

Похожие вопросы: