Archivo jar

Estoy intentando hacer un archivo jar pra luego poder ejecutar la aplicación que contiene, ya creo el archivo con las clases necesarias de la aplicación y modifico el manifes(aunque editandolo porque con la orden jas cmf MiManifes jar-file input-files no me funciona), en fin, lo hago de ese modo y cuando lo quiero ejecutar con
java -jar jar-file, me dice:
" Exception in thread "main" java.lang.NoClassDefFoundError: Fabrica/java"
en la clase Fabrica es en la que este el metodo main y la calse fabrica hereda de JFrame.

1 respuesta

Respuesta
1
Perdón, releyendo mi respuesta, al principio, cuando digo:
Lo de que no te funciona el ejecutar el programa al poner:
java -jar dan.jar IniFabrica
Quería decir:
java -jar dan.jar
Lo siento :)
Hola! :)
Te parecerá increíble pero aun tengo el problema y ahora si que ty desesperado, te lo voy a explicar pero si ya estás cansado lo entiendo.
El archivo que no encuentra es este:AbsoluteLayout.jar y está en esta ruta: C:\forte4j\lib\ext (utilizo el forte y en que hora lo usé!), en fin, por otro lado IniFabrica es el nombre de la clase del main y he hecho un .bat así:
set PATH=%PATH%;C:\Sun\AppServer\jdk\bin
set CLASSPATH=.;C:\forte4j\lib\ext
java -jar dan.jar IniFabrica
(La manera que tu me indicas para ejecutar el jar no me funciona).
En los path de antes veras que aunque digo que uso el forte en el path aparece sun/appserver y es porque en el forte no veo donde tiene los archivos que se suelen encontrar en bin (digo lo mismo, maldita la hora en que use forte)
Bueno pues con el bat ese aun me sale el error aunque incluso en el momento de hacer el jar también meto el AbsoluteLayout.jar y también he probado a no incluirlo y a poner en el classpath la ruta de donde está y aun así sigue fallando.
En fin que toy ..... :)
Muchísimas gracias que t explicas muy bien
Como decía Jack el Destripador (o las millones de personas que decimos esta frase chorra), vayamos por partes:
Lo de que no te funciona el ejecutar el programa al poner:
java -jar dan.jar IniFabrica
Es porque tienes mal editado el archivo manifest del jar, por lo que la opción -jar no la estás utilizando, y lo que hace para lanzar tu programa es lo mismo que haría si escribieras:
java -cp dan.jar IniFabrica
Con "-cp" dices el classpath que quieres que utilice tu programa, y así estás eliminando la variable de entorno "CLASSPATH".
Esa variable no te funciona (no encuentra el archivo AbsoluteLayout.jar) porque cuando le indicas un directorio, el intérprete de java únicamente busca clases (archivos .class) pero omite los archivos .jar.
Tienes dos opciones:
a) Modificar el .bat que has creado para lanzar tu programa:
set PATH=%PATH%;C:\Sun\AppServer\jdk\bin
set CLASSPATH=.;C:\forte4j\lib\ext \AbsoluteLayout.jar
b) Lanzar el .jar del siguiente modo:
java -cp .;dan.jar;C:\forte4j\lib\ext \AbsoluteLayout.jar IniFabrica
Personalmente prefiero utilizar la segunda opción, porque así puedes declarar diferentes classpath para diferentes programas. Además, suele suceder que cuando se utiliza la variable de entorno CLASSPATH, la utilizas con chopocientos archivos .class y .jar para no tener que modificarla nunca... y cuando quieres ejecutar tu programa en otro ordenador nunca te acuerdas de qué archivos .jar y .class depende :)
Lo dicho, para más info o más dudas, ya sabes donde estoy.
El problema que tienes está en el classpath de tu archivo .jar
El manifest de tu jar está buscando el archivo Fabrica/java.class, que me imagino que no existe. Si tu clase se llama "java" y está dentro del paquete "Fabrica" tienes que incluir eso en el archivo manifest. Si lo que ocurre es que tu clase se llama "Fabrica", el problema es que le pusiste al manifes el nombre "Fabrica.java", lo que es un error. Sustituye eso por "Fabrica" y listo :)
Piensa que lo que has escrito dentro del manifest es lo que tu escribirías al ejecutar tu aplicación desde línea de comandos, es decir:
java [esto_es_lo_que_va_en_el_manifest]
Intenta modificarlo, pero si no te sale me puedes mandar un listado de las clases de tu programa (lo obtienes con jar -t <nombre_archivo.jar>) y el nombre de la clase principal, y te digo exactamente qué tienes que poner en el archivo manifest.
Si necesitas cualquier aclaración o te surgen más dudas, ya sabes donde encontrarme :)
Muchísimas gracias he hecho lo que me dices y a la primera, pero...
Ahora tengo otro problema :(( y la solución que he pensado me da miedo que sea verdad, esto es lo que hago y esto es el resultado que me da:
- Ejecuto esto cuando ya tengo el dan.jar:
C:\proyecto>java -jar dan.jar IniFabrica
- Y el resultado que saco es este:
Exception in thread "main" java.lang.NoClassDefFoundError: org/netbeans/lib/awte
xtra/AbsoluteLayout
at Fabrica.initComponents(Fabrica.java:774)
at Fabrica. <init>(Fabrica.java:45)
at IniFabrica. <init>(IniFabrica.java:18)
at IniFabrica.main(IniFabrica.java:24)
, yo he pensado que el problema esta en el layout que tengo en la aplicación y espero que eso no sea porque toda la aplicación esta con ese layout y me muero si tengo que cambiarlo, no se si sera por eso.
PD:el nimbre IniFabrica antes era Fabrica, antes de ver tu respuesta hice algunos cambios
muchas gracias por la de antes y por esta :)
No te asustes :) el error que tienes te lo dice en la excepción, dice que no encuentra la definición de la clase AbsoluteLayout que está en el paquete org.netbeans.lib.awtxextra
Esto lo que quiere decir es que no encuentra la ruta hacia esa clase, y no la encuentra porque en tu programa estás utilizando la clase AbsoluteLayout, que viene con el Netbeans, y al ejecutar el programa no le estás diciendo donde localizarla.
No utilizo netbeans por lo que no puedo decirte exactamente donde está localizada esa clase, pero posiblemente dentro del directorio de Netbeans haya un directorio "lib" o un "common/lib" donde haya varios archivos .jar, y uno de ellos contendrá la clase que buscas. Posiblemente mirando en el classpath de tu aplicación al desarrollarla en Netbeans veas el nombre y la ruta del archivo en cuestión.
La cosa es que, además de tu archivo dan.jar, tienes que utilizar ese archivo de netbeans, pongamos que se llama "NetbeansAWT.jar"
Para ejecutar tu programa tendrías entonces que escribir:
java -cp .;dan.jar;NetbeansAWT.jar;cualquierOtroArchivoQueNecesites.jar -jar dan.jar
Y listo :)
Otra cosa, en tu respuesta dices que llamas a tu programa como:
java -jar dan.jar IniFabrica
Dentro de tu archivo dan.jar tienes un archivo manifest donde le dices que la clase principal es IniFabrica. Java lee ese dato cuando lo llamas con la opción "-jar", por lo que la palabra "IniFabrica" que utilizas después de dan.jar la está tomando como un parámetro para la ejecución de tu programa.
Si efectivamente es un parámetro entonces olvida lo que te he dicho ;) pero si como creo es el nombre de tu clase principal, no hace falta que lo pongas ahí porque el intérprete de java lo está tomando como un parámetro para tu programa, y está ejecutando el programa que le has indicado en el archivo manifest.
Lo dicho, si necesitas cualquier aclaración o te surgen más dudas, ya sabes donde encontrarme :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas