Как выполнить java.class из командной строки

У меня есть скомпилированный класс 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?

Ответ 1

Try:

java -cp . Echo "hello"

Предполагая, что вы скомпилированы с помощью:

javac Echo.java 

Тогда существует вероятность того, что "текущий" каталог не находится в вашем пути к классам (где java ищет определения .class)

Если это событие и список содержимого вашего каталога показывает:

Echo.java
Echo.class

Тогда любое из этого может работать:

java -cp . Echo "hello"

или

SET CLASSPATH=%CLASSPATH;.  

java Echo "hello"

И позже, как Fredrik, вы получите другое сообщение об ошибке.

Исключение в потоке "main" java.lang.NoSuchMethodError: main

Когда это произойдет, идите и прочитайте его ответ:)

Ответ 2

Вам нужно указать путь к классам. Это должно сделать это:

java -cp . Echo "hello"

Это говорит о том, что java использует . (текущий каталог) как свой путь к классам, то есть место, где он ищет классы. Обратите внимание, что при использовании пакетов путь к классам должен содержать корневой каталог, а не подкаталоги пакета. например если ваш класс my.package.Echo, а файл .class - bin/my/package/Echo.class, то правильный каталог пути к траектории bin.

Ответ 3

У вас нет действительного основного метода... Подпись должна быть: public static void main ( String [] args);

Следовательно, в вашем случае код должен выглядеть следующим образом:

public class Echo {
    public static void main (String[] arg) {

            System.out.println(arg[0]);
    }
}

Изменить: Обратите внимание, что Оскар также прав в том, что вы отсутствуете. в вашем пути к классам, вы столкнулись с проблемой, которую я решаю после того, как вы справитесь с этой ошибкой.

Ответ 5

Моя ситуация была немного сложной. Мне пришлось сделать три шага с тех пор, как я использовал .dll в каталоге ресурсов для кода JNI. Мои файлы были

S:\Accessibility\tools\src\main\resources\dlls\HelloWorld.dll
S:\Accessibility\tools\src\test\java\com\accessibility\HelloWorld.class

Мой код содержал следующую строку

System.load(HelloWorld.class.getResource("/dlls/HelloWorld.dll").getPath());

Во-первых, мне пришлось переместиться в каталог маршрутов

cd /D "S:\Accessibility\tools\src\test\java"

Затем мне пришлось изменить путь к классу, чтобы указать на текущий каталог, чтобы мой класс был загружен, и мне пришлось изменить путь к классу, чтобы указать на его каталог ресурсов, чтобы моя DLL была загружена.

set classpath=%classpath%;.;..\..\..\src\main\resources; 

Затем мне пришлось запустить java, используя имя класса.

java com.accessibility.HelloWorld 

Ответ 6

Во-первых, вы скомпилировали класс с помощью компилятора javac командной строки? Во-вторых, кажется, что ваш основной метод имеет неправильную подпись - он должен принимать в массиве объектов String, а не только один:

public static void main(String[] args){

После того, как вы изменили код, чтобы взять массив объектов String, вам нужно убедиться, что вы печатаете элемент массива, а не массив:

System.out.println(args[0])

Если вы хотите распечатать весь список аргументов командной строки, вам нужно будет использовать цикл, например

for(int i = 0; i < args.length; i++){
    System.out.print(args[i]);
}
System.out.println();