Cómo ejecutar una clase .java desde la línea de comando

Tengo una clase java comstackda:

Echo.class

public class Echo { public static void main (String arg) { System.out.println(arg); } } 

cd en el directorio e ingreso: java Echo "hello"

Me sale este error:

 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. 

¿Cuál es la forma más sencilla de obtener mi código java en una forma que pueda ejecutar desde la línea de comando como apposed a tener que usar Eclipse IDE?

Tratar:

 java -cp . Echo "hello" 

Suponiendo que compiló con:

 javac Echo.java 

Entonces existe la posibilidad de que el directorio “actual” no esté en su classpath (donde java busca definiciones .class)

Si ese es el caso y una lista de los contenidos de su dir muestra:

 Echo.java Echo.class 

Entonces, algo de esto puede funcionar:

 java -cp . Echo "hello" 

o

 SET CLASSPATH=%CLASSPATH;. java Echo "hello" 

Y luego, como señala Fredrik , aparecerá otro mensaje de error como.

Excepción en el hilo “principal” java.lang.NoSuchMethodError: main

Cuando eso suceda, ve y lee su respuesta 🙂

Debe especificar la ruta de clase. Esto debería hacerlo:

 java -cp . Echo "hello" 

Esto le dice a Java que use . (el directorio actual) como su classpath, es decir, el lugar donde busca las clases. Tenga en cuenta que cuando usa paquetes, el classpath debe contener el directorio raíz, no los subdirectorios del paquete. por ejemplo, si su clase es my.package.Echo y el archivo .class es bin/my/package/Echo.class , el directorio correcto de classpath es bin .

No tiene un método principal válido … La firma debe ser: public static void main ( String [] args);

Por lo tanto, en su caso el código debería verse así:

 public class Echo { public static void main (String[] arg) { System.out.println(arg[0]); } } 

Editar: Tenga en cuenta que Oscar también tiene razón en que está desaparecido. en tu ruta de clase, te encontrarás con el problema que resuelvo después de que hayas solucionado ese error.

Puede haber varias cosas incorrectas. Aquí hay un tutorial que debería comenzar: Ejecutar Java como una aplicación de línea de comandos .

Mi situación fue un poco complicada. Tenía que hacer tres pasos desde que estaba usando un .dll en el directorio de recursos, para el código JNI. Mis archivos eran

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

Mi código contenía la siguiente línea

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

Primero, tuve que moverme al directorio classpath

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

Luego, tuve que cambiar la ruta de clases para apuntar al directorio actual para que mi clase se cargara y tuve que cambiar la ruta de clase para apuntar al directorio de recursos para que mi dll se cargara.

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

Entonces, tuve que ejecutar Java usando el nombre de clase.

 java com.accessibility.HelloWorld 

Si tienes en tu fuente de Java

 package mypackage; 

y tu clase es hello.java con

 public class hello { 

y en ese hello.java tienes

  public static void main(String[] args) { 

Luego (después de la comstackción) cambieDir (cd) al directorio donde está su hello.class. Entonces

 java -cp . mypackage.hello 

Tenga en cuenta el directorio actual y el nombre del paquete antes del nombre de la clase. Funciona para mi en Linux mint y espero que en el otro os también

Gracias Stack overflow por una gran cantidad de información.

Primero, ¿compiló la clase usando el comstackdor javac de la línea de comando? En segundo lugar, parece que su método principal tiene una firma incorrecta: debería tomar una matriz de objetos String, en lugar de solo uno:

 public static void main(String[] args){ 

Una vez que haya cambiado su código para incorporar una matriz de objetos String, entonces necesita asegurarse de que está imprimiendo un elemento de la matriz, en lugar de la matriz misma:

 System.out.println(args[0]) 

Si desea imprimir toda la lista de argumentos de la línea de comando, necesitaría usar un bucle, por ej.

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