Utilizando Eclipse he creado un SWT programa Hola Mundo. Yo era capaz de ejecutar este programa desde Eclipse y funcionó bien.

En el «/home/minombre/workspace/HelloWorldSWT» he encontrado dos archivos: HelloWorldSWT.java y HelloWorldSWT.class. Yo quería ejecutar el programa desde la línea de comandos. Primero traté de tipo «java Holamundo» y recibí el siguiente mensaje de error:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
   at gnu.java.lang.MainThread.run(libgcj.so.90)
Caused by: java.lang.ClassNotFoundException: HelloWorld not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(libgcj.so.90)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at gnu.java.lang.MainThread.run(libgcj.so.90)

También he probado este «java -cp /home/roman/espacio de trabajo/HelloWorld.HelloWorld». Como el resultado que obtuve el siguiente mensaje de error:

Exception in thread "main" java.lang.NoClassDefFoundError: loaded class HelloWorld.HelloWorld was in fact named HelloWorld
   at java.lang.VMClassLoader.defineClass(libgcj.so.90)
   at java.lang.ClassLoader.defineClass(libgcj.so.90)
   at java.security.SecureClassLoader.defineClass(libgcj.so.90)
   at java.net.URLClassLoader.findClass(libgcj.so.90)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at gnu.java.lang.MainThread.run(libgcj.so.90)

¿Alguien sabe qué estoy haciendo mal? Gracias de antemano por cualquier ayuda.

InformationsquelleAutor Roman | 2010-02-16

9 Comentarios

  1. 69

    Ir a la perspectiva Debug, y seleccione el programa que acabas de correr (donde dice Terminado, salga de valor… en la ficha Depurar) haga clic Derecho y elija Propiedades, allí se puede ver toda la línea de comando que fue lanzada por el eclipse.

    Puede ejecutar el mismo comando en el mismo directorio de eclipse hizo (ver en Ejecutar las Configuraciones, los Argumentos de directorio de Trabajo) y se va a trabajar.

    • No puedo encontrar la «perspectiva Debug». De donde es?
    • Elija agregar una perspectiva y usted puede elegir la Depuración uno entre otros
    • +1. Forma más sencilla de encontrar completa de comandos a ejecutar. He tenido que cambiar javaw.exe a java.exe, quitar algunos innecesarios interruptores y trabajó como un encanto.
    • «<terminado, valor de salida: 0>» es en la pestaña «Depuración», allí debes hacer clic derecho. me tomó un buen tiempo…
    • Lo que un buen consejo gracias. Yo también tenía que ejecutar java en lugar de javaw pero la ruta de clases, etc. que estaba en la línea de comando hizo el trabajo. Me salvó de tanto tiempo!!!
    • Por favor, puedes dar mas info en cuanto a «cómo» esta línea de comando es ejecutado por Eclipse (simulando la tipificación de «java» comando con la mano en la línea de comandos y pulsar Intro)? ¿Cuál es la porción exacta/característica de Java y/o sistema operativo Windows que se utiliza por Eclipse para obtener el mismo resultado ?

  2. 7

    Debe agregar el directorio donde el eclipse es el almacenamiento de la HelloWorldSWT.class archivo en la ruta de clases. Se define cuando se crea el proyecto, como «bin», «construir» o «clases». Compruebe las propiedades del proyecto o de la búsqueda de la HelloWorldSWT.class archivo.

    Suponiendo que es el build directorio dentro de la HelloWorldSWT área de trabajo y que su clase está en ningún paquete (paquete predeterminado), el comando debe ser:

    java -cp /home/roman/workspace/HelloWorldSWT/build HelloWorldSWT

    o simplemente cambiar a ese directorio y uso:

    java -cp . HelloWorldSWT

    EDICIÓN:

    El -cp . significa que sólo el directorio real que se utiliza para encontrar los archivos de clase. También debe agregar todas las bibliotecas (Frascos u otros directorios) que utiliza el programa (databse, SWT, …).

    Para más detalles se puede echar un vistazo a la documentación: Como las Clases se Encuentran, Configuración de la ruta de clases y java comand

    • He encontrado el HelloWorldSWT.class. Se encuentra en «/home/minombre/workspace/HelloWorldSWT/». Voy a este directorio y de tipo «java -cp . HelloWorldSWT». Como el resultado que obtengo un mensaje de error: Exception in thread «main» java.lang.NoClassDefFoundError: org.eclipse.swt.los widgets.Pantalla
    • que es el siguiente problema: se debe agregar todas las librerías necesarias para el CLASSPATH variable de entorno o la -cp argumento; por ejemplo: java -cp .:lib/somelib.jar:... HelloWorldSWT. He editado mi respuesta añadir un enlace a la documentación (estoy seguro de que el CLASSPATH pregunta es contestada en algún otro lugar stackoverflow.com)
  3. 4

    Hago un poco de solución a fin de aprovechar plenamente el Eclipse de conveniencia. A continuación es lo que he encontrado, y funcionó bien para mí. Esperamos que ayude a:
    Puedo ejecutar desde la línea de comandos del programa creado por el Eclipse?

  4. 3

    Me parece que usted no tiene una clase llamada HelloWorldSWT`, sino más bien una clase denominada HelloWorldSWT en un paquete denominado HelloWorldSWT (puede confirmar esto de ir en la primera línea de HellowWorldSWT.java, donde encontrará package HelloWorldSWT;

    Si es así, ir en el directorio principal y el tipo

    java HelloWorldSWT.HelloWorldSWT
    Esto iba a funcionar.

    • Trabajó para mí. Sólo quería poner a prueba Hola mundo
  5. 2

    Es posible que no carga la SWT biblioteca correctamente, y como resultado de su clase no se puede cargar.

    La SWT biblioteca es parte de los frascos que ya están cargados al ejecutar Eclipse pero no se cargan en un parámetro de línea de comandos. No lo modifica su ruta de clase en consecuencia?

    Aquí es un viejo artículo sobre cómo hacer este tipo de cosas en las versiones anteriores de Eclipse
    http://www.ibm.com/developerworks/opensource/library/os-ecgui1/
    Usted va a necesitar diferentes frascos de hoy en día con la última versión de fo Eclipse. Podría incluso llegar a un solo frasco.

    Retirar el SWT FAQ; al menos para Mac de Carbono, puede utilizar un solo frasco, yo apuesto a que usted puede hacer que para otras plataformas.

    También, no estoy 100% seguro de que usted puede ejecutar Eclipse bajo openJDK, que parece ser el caso en su plataforma.

    • Gracias por la respuesta. Soy un novato en Java y no entiendo la esencia. Quiero decir, parece extraño para mí que tenemos que utilizar algunas formas ingeniosas para ejecutar SWG aplicaciones sin Eclipse. ¿Cuál es el uso de el programa escrito en Eclipse si se puede ejecutar fácilmente sólo en el Eclipse?
    • Si quieres algo fácil se ejecuta la interfaz gráfica de la aplicación en Java, no uso SWT, pero el Swing. Si utiliza SWT, usted tiene que administrar sus dependencias. A la hora de crear una aplicación RCP, la plataforma gestiona estas dependencias para usted, pero en el caso de programas estándar, usted tiene que depender de la SWT frascos de uso de las rutas de clases.
  6. 1

    Este es el problema, que es causada debido a la JVM no es capaz de encontrar la clase HelloWorld como tiene el nombre de la clase como HelloWorldSWT con un método main en ella. pruebe con

    java HelloWorldSWT

    • Traté de «java -cp /home/roman/espacio de trabajo/ HelloWorldSWT.HelloWorldSWT» y «java HelloWorldSWT». Los dos no funciona.
  7. 1

    No ha establecido classpath correctamente.

    Creo que por lo general es más conveniente tener el IDE construye un jar-file con todos los no-jre libs incluido y lo ejecuta desde la línea de comandos.

    java -jar myprogram.jar

    Lo que es el uso de el programa escrito en Eclipse si se puede ejecutar fácilmente sólo en el Eclipse?

    Que realmente es una buena pregunta, y la implementación de aplicaciones en java es realmente un arte en sí mismo. Tanto de la compilación y la ejecución es – si no es complicado – al menos engorroso cuando se realiza a mano. Pero Eclipse y otras herramientas como Netbeans puede ayudarle a realizar estas tareas de una manera fácil, e incluso el paquete de su programa para usted de modo que otras personas que no utilizan estas herramientas también se pueden ejecutar los programas fácilmente.

  8. 1

    Si quieres ejecutar el programa con argumentos de línea de comandos desde dentro de Eclipse puede ir a Ejecutar->Ejecutar las Configuraciones, que abrirá una ventana con el programa que se está ejecutando, así como un cuadro en el que puede entrar en los argumentos.

  9. 1

    Me encontré con otro rápido y sucio solución si solo quieres ver algunas de salida en la línea de comandos. Pero esto es no es una buena práctica para el largo plazo!

    1. Quitar el paquete de la declaración en el código (Eclipse se quejan y le dará una cruz roja, ignorar que la primera), por ejemplo, package hello;

    2. Guardar.

    3. Abrir la línea de comandos y navegar hasta que esté en la carpeta src (cd).

    4. Compilar el archivo java, por ejemplo, javac HelloWorld.java

    5. Ejecutar el archivo de clase java, por ejemplo, java HelloWorld

    Se debe trabajar, siempre y cuando usted está en el directorio correcto sin ningún paquete de declaraciones en el código! El paquete de declaraciones no causa problemas..y Eclipse está configurado para asegurarse de que todo funciona así que por eso es bueno tener el paquete de declaraciones de allí. Una solución alternativa es ir realmente y establecer la ruta de clases por su cuenta (que siempre me confunde cada vez que tengo que hacerlo yo, que rara vez lo hacen).

Dejar respuesta

Please enter your comment!
Please enter your name here