2009-02-03 30 views
5

utilizo la línea de comando en Windows para compilar y luego ejecutar mis programas de Java. He ido al http://java.sun.com/docs/books/tutorial/uiswing/start/compile.html e intenté compilar la clase HelloWorldSwing.java. funcionó, pero cuando intento "HelloWorldSwing java" me da un montón de erros y dice algo en la línea de Excepción en el hilo "principal" java.lang.NoClassDefFoundError: HelloWorldSwing (nombre equivocado: start/HelloWorldSwing)no se puede ejecutar swing desde la línea de comando

intento ejecutar con java start/HelloWorldSwing y dice noClassDefFoundError. no consigo errores con javac tampoco. Aquí está el código del tutorial:

import javax.swing.*;   

public class HelloWorldSwing { 
    /** 
    * Create the GUI and show it. For thread safety, 
    * this method should be invoked from the 
    * event-dispatching thread. 
    */ 
    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("HelloWorldSwing"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Add the ubiquitous "Hello World" label. 
     JLabel label = new JLabel("Hello World"); 
     frame.getContentPane().add(label); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     //Schedule a job for the event-dispatching thread: 
     //creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

EDIT: javaw utilizado

ventana aparece

"una excepción de Java se ha producido"

otra ventana

"error: podría no encuentra la clase principal. error: se ha producido un error jni, verifique su instalación y vuelva a intentarlo ".

nunca he tenido ningún problema al ejecutar cualquier programa de Java, ¿me falta algo? ¿Hay alguna forma de saber qué es?

también estoy ejecutando el comando en la misma ruta donde están .java y .class.

no hay inicio de carpeta en la ruta donde compilé el programa.

EDIT2 Intenté tanto iniciar/HelloWorldSwing como HelloWorldSwing con java.

No obtengo ningún error con javac también. Recibo 2 ventanas emergentes con los mensajes que he tipeado previamente cuando uso javaw y java me da la NoClassDefFoundException, luego habla sobre los ClassLoaders y otras cosas.

EDIT3 Lo tengo que trabajar eliminando el "inicio del paquete"; línea. ¿Qué tendría que hacer para que funcione con eso?

javaw también funciona ahora que eliminé la línea del paquete.

+0

¿Podría pegar la salida de la consola desde donde escribe "javac etc etc" donde continúa escribiendo javac etc.etc? – OscarRyz

Respuesta

2

Sip. Esa página tiene un ligero error:

La clase utiliza un paquete, pero en las instrucciones de ejecutar el paquete no se utiliza

Puede hacer dos cosas:

a) dejar caer el nombre del paquete (eliminar la línea de pacakge start;) y se ejecuta como se indica

O

b) Dejar la línea package start; en el código y anexar la opción -d-javac y el uso de la plena nombre de la clase.

Espero que esto ayude.

+1

Las imágenes se han ido ahora, ¿podrías editar la publicación? – Mhmd

+0

Es por eso que se supone que debes subir imágenes a imgur usando las funciones de editor integradas en lugar de administrarlas tú mismo. O mejor aún, no usar imágenes en absoluto y usar bloques de código en su lugar (como [lo hizo media hora antes] (http://stackoverflow.com/a/509330/119540) publicando esta respuesta). ': - /' – Synetech

+0

El editor integrado no existía cuando creé esta respuesta por primera vez hace casi 7 años. – OscarRyz

2

Prueba esto:

java HelloWorldSwing

En lugar de:

java start/HelloWorldSwing

El argumento para el compilador de Java (javac) es un archivo (por eso START/HelloWorldSwing.java trabajó probablemente) pero el argumento para el intérprete de Java (java) es un nombre de clase.

Es por eso que no anexar los .class en la línea de comandos, y puesto que no hay una clase nombrada inicio/HelloWorldSwing Usted recibe ese mensaje de error (NoClassDefFoundError), que dice: "No hay definición de clase se encuentran con ese nombre).

Para que sea más fácil, compile y ejecute sus primeros programas desde el mismo directorio donde están sus archivos .java.

+0

Lo hizo; ver el primer párrafo de la pregunta. –

+0

@mmyers. No me di cuenta. – OscarRyz

1

probado el código funciona bien asegúrese de que su en el mismo directorio que el archivo Java y hacer

javac HelloWorldSwing.java 
java HelloWorldSwing 
3

¿Dónde están invocando el comando de java? Desde su descripción, HelloWorldSwing.class está en la carpeta "inicio", pero no está en un paquete. Esta es probablemente la fuente del error. Proveedores:

cd start 
java HelloWorldSwing 

EDIT: El código del tutorial tiene una declaración "package start;" en ella. ¿Lo eliminaste? De lo contrario, coloque HelloWorldSwing en la carpeta "inicio" y ejecute

java start.HelloWorldSwing 

de la carpeta actual.

Vea también package tutorial.

+0

No si la clase contiene una directiva de paquete. –

+0

@Pourquoi Litytestdata: ¿Qué no sucede? –

+0

@mmyers: Yeap, probablemente el error está ahí, en el paquete de inicio. :) – OscarRyz

1

El código que ha vinculado no es el mismo que el código que ha incluido en su pregunta. Tiene esta línea en la parte superior:

package start; 

En Java, la estructura del paquete debe reflejar la estructura del paquete. Entonces, si sus clases están en un paquete llamado 'inicio', los archivos de clase compilados deben estar en un directorio llamado 'inicio'. Por lo tanto, asegúrese de que HelloWorldSwing.class está en el directorio de 'inicio' y ejecute el siguiente formulario directorio padre:

java start.HelloWorldSwing 
0

Sólo añadir una línea:

import java.awt.*;

0

Se puede compilar por:

javac HelloWorldSwing.java 

se puede ejecutar por:

java -cp . HelloWorldSwing.java 

Ésta realmente funciona.

Cuestiones relacionadas