2011-08-15 17 views
9

Estoy tratando de ejecutar un archivo test.class desde la línea de comandos de Linux. Recopilé el archivo usando javac test.java que produjo el archivo test.class. Cuando ejecuto el comando java test arroja una excepción de clase no encontrada. También traté de especificar el nombre del paquete con el mismo resultado. Aquí está la salida, ¿alguien puede ayudar? Creo que mi sintaxis es correcta según las búsquedas de Google.¿Por qué obtengo un NoClassDefFoundError cuando ejecuto un archivo de clase Java desde la línea de comandos en Linux?

[[email protected] usr]# java test 
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: testJava/test) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:634) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) 
     at java.net.URLClassLoader.access$000(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:212) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: test. Program will exit. 
+0

¿Cuál es el paquete declarado en su clase? Además, ¿su estructura de directorios imita la declaración del paquete? – Jeremy

Respuesta

4

Uso java testJava.test desde el directorio padre de testJava

+0

Así es como lo hice en el pasado, pero por alguna razón no funciona. Fue lo primero que intenté. – tier1

+0

@tkcsam: ¿Su directorio 'usr' contiene' testJava', ¿puede imprimir el contenido del directorio 'usr' y' testJava' utilizando el comando ls? – Ankur

+0

¡Ahh usted me lleva a la respuesta correcta! No tenía la pruebaJava direcory. ¡Gracias a todos! – tier1

8

necesita compilar el archivo .java con javac:

javac MyFile.java 

continuación, ejecute el archivo usando java

java MyFile 

Si usted está haciendo esto y todavía no lo hace trabajo, eso significa que necesita asegurarse de que el archivo y el nombre de clase dentro del archivo tengan el mismo nombre ... entonces MyFile.java contiene

class MyFile 
    { 
    // ... 
    public static void main(String[] args) 
    { 
     // ... 
    } 
    // ... 
    } 
+0

Hice esto. Recopilé e intenté ejecutarlo tal como se muestra, pero no puede encontrar la clase por algún motivo – tier1

+0

Si crea un archivo nuevo usando, p. Ej., vi o vim, llamado MyFile.java, cortar y pasar el código anterior en el archivo, guardar y hacer las líneas javac y java, ¿obtiene el mismo error? Haga todo esto desde una línea de comando en el directorio donde guarda MyFile. No uses nada elegante. Es difícil saber si este es un problema de código, un problema de Java o un problema de OS/fs. – Patrick87

+0

hm funciona cuando creo un nuevo archivo como usted sugiere. Aunque su ejemplo no especifica un nombre de paquete ... – tier1

1

Asumiendo que su clase tiene el siguiente aspecto:

package javaTest; 

public class test{ 
    public static void main(String[] a){ 
     System.out.println("Test"); 
    } 
} 

A continuación, compilar y ejecutar el archivo, que, básicamente, hace esto:

$ ls 
testJava 
$ ls testJava 
test.java 
$ javac testJava/test.java 
$ java testJava.test 
Test 

Lo que esto significa es que debe ejecutar la clase con su nombre completo, que incluye el nombre del paquete de la clase. También debe hacerlo desde el directorio que contiene la raíz de su paquete. (A menos que especifique el directorio "raíz" con el -cp indicador.)

1

Yo también tuve un problema inicialmente.

java -cp. Prueba

Prueba este link y creo que podría ser útil.

+0

Siempre olvídate de poner el. en el CP, no sé por qué te hacen ponerlo. ¡¡Gracias hombre!! Volveré dentro de un mes más o menos: D –

Cuestiones relacionadas