2009-12-22 45 views
6

Me gustaría hacer una aplicación cli "doble clic" pero todavía no entiendo cómo. Sé que debo propagablemente de alguna manera editar manifiesto, pero eso es todo. Busqué en Google ofc. pero sin éxito Gracias por cualquier consejo. Aquí está la salida de crear, ejecutar y manifiesto:Cómo crear un archivo ejecutable .jar con netbeans

compile: 
Created dir: /home/nick/NetBeansProjects/SemestralWork/dist 
Building jar: /home/nick/NetBeansProjects/SemestralWork/dist/SemestralWork.jar 
Not copying the libraries. 
To run this application from the command line without Ant, try: 
java -jar "/home/nick/NetBeansProjects/SemestralWork/dist/SemestralWork.jar" 
jar: 
BUILD SUCCESSFUL (total time: 1 second) 


java -jar /home/nick/NetBeansProjects/SemestralWork/dist/SemestralWork.jar 

Exception in thread "main" java.lang.NoClassDefFoundError: semestralwork/Main 
Caused by: java.lang.ClassNotFoundException: semestralwork.Main 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:319) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:264) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332) 
Could not find the main class: semestralwork.Main. Program will exit. 

MY MANIFEST created with build: 

Manifest-Version: 1.0 

Ant-Version: Apache Ant 1.7.1 

Created-By: 14.0-b08 (Sun Microsystems Inc.) 

Main-Class: semestralwork.Main 

Class-Path: 

X-COMMENT: Main-Class will be added automatically by build 

Respuesta

0

La ruta de búsqueda de clase por defecto puede ser el problema. Debería intentar cambiar el directorio a la ubicación del jar y ejecutarlo con java -jar Semestral.jar. También puede haber mal llamado a la clase principal. Por favor, también incluya su estructura de paquete.

0

Abra el archivo JAR con una herramienta ZIP (o intente less ... si está en Linux o jar tvf ...). Asegúrese de que haya un directorio semestralwork que contenga un archivo Main.class.

+0

existe un método llamado "encryption.class" que llamo desde el método principal – landscape

+0

Ese es su problema, entonces. A la clase le falta el JAR y es por eso que Java no puede encontrarlo. –

1

Es más fácil hacer un .exe de un .jar sin NetBeans. Aquí están mis sugerencias: 1. Uso de una aplicación especial para ello (por ejemplo: JSmooth, JEXECreator etc) 2. Hacer un programa en C++ que inicia una JVM (ver este tutorial)

6

Estas dos líneas que todo lo que dicen necesita saber:

Exception in thread "main" java.lang.NoClassDefFoundError: semestralwork/Main 
Caused by: java.lang.ClassNotFoundException: semestralwork.Main 

Y una pista más se deja caer por la salida manifiesta:

Main-Class: semestralwork.Main 

Esto significa que el archivo JAR está buscando un paquete llamado semestralwork y una clase llamada Main dentro de ella. En este momento falla porque no puede encontrar el paquete semestralwork o la clase Main.

Como indicó en su pregunta, el problema está en el archivo de manifiesto. Puede editar esta directamente en su archivo JAR, si se quiere, pero una mejor idea sería hacer esto desde Netbeans:

  • Haga clic en 'Archivo -> Propiedades del proyecto (semestralwork)'
  • En el cuadro de diálogo que se abre, en el árbol de la izquierda seleccionar Run
  • a continuación, a la derecha, bajo el campo etiquetado Main class:, entrar en el nombre de clase completo de la clase que desea ejecutar cuando se ejecuta desde la línea de comandos.

En su caso, como lo veo de sus comentarios sobre la respuesta de @ Aaron, si la clase principal se encuentra en un archivo llamado encryption.java, y es en el paquete por defecto (sin paquete), basta con introducir encryption.

Una vez hecho esto, haga una limpieza y compilación, luego intente ejecutarlo desde la línea de comando nuevamente.

HTH

4

Dado que me encontré con el mismo problema, puedo aclarar la solución un poco.

Debe crear la clase principal de Java fuera de su método (por ejemplo, la carpeta default_package), y luego invocar su método (carpeta), por ejemplo, import your_folder.connected_class; en esa clase principal.

Espero que pueda ayudar a alguien con el mismo problema.

0

Es fácil. Descargue una copia de netbeans. Haga un nuevo proyecto en netbeans. Vaya a su clase principal en el Explorador de proyectos. Esta debería ser la carpeta "YourProject" Como la clase YOURPROJECT.JAVA. Es este archivo yourproject.java con el que desea comenzar. Simplemente escriba su código en el área principal vacía pública estática. Puede ejecutar el programa con el botón de reproducción verde en la barra de herramientas superior.

Cuestiones relacionadas