У меня есть скомпилированный класс java:
Echo.class
public class Echo {
public static void main (String arg) {
System.out.println(arg);
}
}
I cd
в каталог и введите:java Echo "hello"
Я получаю такую ошибку:
C:\Documents and Settings\joe\My Documents\projects\Misc\bin>java Echo "hello"
Exception in thread "main" java.lang.NoClassDefFoundError: Echo
Caused by: java.lang.ClassNotFoundException: Echo
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Echo. Program will exit.
Каков самый простой способ получить мой Java-код в форме, которую я могу запускать из командной строки, в отличие от использования Eclipse IDE?
Ответы:
Пытаться:
Предполагая, что вы скомпилировали:
Тогда есть шанс, что «текущий» каталог не находится в вашем пути к классам (где java ищет определения .class)
Если это так, и отображается список содержимого вашего каталога:
Тогда все это может сработать:
или
А позже, как указывает Фредрик , вы получите еще одно сообщение об ошибке, например.
Когда это произойдет, прочтите его ответ :)
источник
Вам нужно указать путь к классам. Это должно сделать это:
Это указывает java использовать
.
(текущий каталог) в качестве пути к классам, то есть места, где она ищет классы. Обратите внимание, что при использовании пакетов путь к классам должен содержать корневой каталог, а не подкаталоги пакета. например, если ваш класс есть,my.package.Echo
а файл .class -bin/my/package/Echo.class
это правильный каталог пути к классамbin
.источник
У вас нет действующего основного метода ... Подпись должна быть: public static void main ( String [] args);
Следовательно, в вашем случае код должен выглядеть так:
Изменить: обратите внимание, что Оскар также прав в том, что вам не хватает. в пути к классам вы столкнетесь с проблемой, которую я решаю, после того, как исправите эту ошибку.
источник
С Java 11 вам больше не придется проходить через эту чушь!
Вместо этого вы можете сделать это:
Вам не нужно компилировать заранее, так как все это делается за один шаг.
Вы можете получить Java 11 JDK здесь: JDK 11 GA Release
источник
Если у вас есть в исходном коде Java
и ваш класс hello.java с
и в этом hello.java у вас есть
Затем (после компиляции) changeDir (cd) в каталог, где находится ваш hello.class. затем
Обратите внимание на текущий каталог и имя пакета перед именем класса. Это работает для меня на Linux Mint, и я надеюсь, что и на других ОС
Спасибо Stack overflow за обилие информации.
источник
./mypackage/hello.class
имени. См. Также: вопрос « Запуск java в пакете из командной строки ».Моя ситуация была немного сложной. Мне пришлось сделать три шага, так как я использовал .dll в каталоге ресурсов для кода JNI. Мои файлы были
Мой код содержал следующую строку
Сначала мне пришлось перейти в каталог пути к классам
Затем мне пришлось изменить путь к классам, чтобы он указывал на текущий каталог, чтобы мой класс был загружен, и мне пришлось изменить путь к классам, чтобы указать на каталог ресурсов, чтобы моя dll была загружена.
Затем мне пришлось запустить java, используя имя класса.
источник
Во-первых, скомпилировали ли вы класс с помощью компилятора javac командной строки? Во-вторых, похоже, что ваш основной метод имеет неправильную подпись - он должен принимать массив объектов String, а не только один:
После того как вы изменили свой код, чтобы он принимал массив объектов String, вам нужно убедиться, что вы печатаете элемент массива, а не сам массив:
Если вы хотите распечатать весь список аргументов командной строки, вам нужно будет использовать цикл, например
источник