Tengo una clase java compilada:
Clase de eco
public class Echo {
public static void main (String arg) {
System.out.println(arg);
}
}
Yo cd
al directorio y entro: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 comandos en oposición a tener que usar Eclipse IDE?
Respuestas:
Tratar:
Suponiendo que compiló con:
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 se muestra una lista del contenido de su directorio:
Entonces cualquiera de esto puede funcionar:
o
Y más tarde, como señala Fredrik , obtendrá otro mensaje de error como.
Cuando eso suceda, ve y lee su respuesta :)
fuente
Debe especificar la ruta de clase. Esto debería hacerlo:
Esto le dice a Java que use
.
(el directorio actual) como su ruta de clases, es decir, el lugar donde busca las clases. Tenga en cuenta que cuando utiliza paquetes, la ruta de clases debe contener el directorio raíz, no los subdirectorios del paquete. por ejemplo, si su clase esmy.package.Echo
y el archivo .class esbin/my/package/Echo.class
, el directorio de ruta de clases correcto esbin
.fuente
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í:
Editar: tenga en cuenta que Oscar también tiene razón en que no está. en su classpath, se encontrará con el problema que resuelvo después de haber tratado con ese error.
fuente
¡Con Java 11 ya no tendrás que pasar por este galimatías!
En su lugar, puede hacer esto:
No tiene que compilar de antemano, ya que todo se hace en un solo paso.
Puede obtener Java 11 JDK aquí: JDK 11 GA Release
fuente
Si tiene en su fuente java
y tu clase es hello.java con
y en eso hola java tienes
Luego (después de la compilación) cambieDir (cd) al directorio donde está su hello.class. Luego
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 otros sistemas operativos también
Gracias Stack overflow por una gran cantidad de información.
fuente
./mypackage/hello.class
nombre. Consulte también: Pregunta " Ejecutar java en el paquete desde la línea de comandos ".Mi situación fue un poco complicada. Tuve que hacer tres pasos ya que estaba usando un .dll en el directorio de recursos, para el código JNI. Mis archivos fueron
Mi código contenía la siguiente línea
Primero, tuve que moverme al directorio classpath
A continuación, tuve que cambiar la ruta de clase para que apunte al directorio actual para que se cargue mi clase y tuve que cambiar la ruta de clase para que apunte al directorio de recursos para que se cargue mi dll.
Luego, tuve que ejecutar java usando el nombre de clase.
fuente
Primero, ¿ha compilado la clase usando el compilador javac de línea de comando? En segundo lugar, parece que su método principal tiene una firma incorrecta; debería incluir una matriz de objetos String, en lugar de solo uno:
Una vez que haya cambiado su código para incluir una matriz de objetos String, debe asegurarse de que está imprimiendo un elemento de la matriz, en lugar de la matriz en sí:
Si desea imprimir la lista completa de argumentos de la línea de comando, deberá usar un bucle, por ejemplo
fuente