JAR ejecutable

336 views
Skip to first unread message

Teli

unread,
Jul 28, 2008, 2:13:45 AM7/28/08
to JavaSOS
Buenos días a todos, después de mucho sufrmiento he conseguido
obtener de mi aplicación de swing un fichero jar ejecutable pero la
sorpresa es que una de las partes de mi aplicación consiste en la
optención de informes pero estos no me aparecen; utilizo el Jassreport
para visualizarlos.
Tampoco me funciona el envio de emails desde la propia aplicación.

Alguien sabe porque puede ser? GRACIAS

Javier Alfonso Bellota de Frutos

unread,
Jul 28, 2008, 2:51:09 AM7/28/08
to jav...@googlegroups.com
¿Cuándo ejecutas el programa indicas en el class path las librerías de Jassreport?
¿Te sale algún mensaje de error en la consola?

Teli

unread,
Jul 29, 2008, 4:11:56 AM7/29/08
to JavaSOS
Yo el fichero jar-ejecutable lo genero con la herramienta Fat jar de
eclipse y si cuando abro dicho fichero veo que están todos las
librerías auxiliares que yo he agregado mientras desarrollaba la
aplicación; la cuestión es que no me encuentra el fichero .jasper y no
lo entiendo cuando en el desarrollo si que me lo encuentra.
Otra pregunta a que te refieres con lo de classpath?

On 28 jul, 08:51, "Javier Alfonso Bellota de Frutos"

Javier Alfonso Bellota de Frutos

unread,
Jul 29, 2008, 4:29:14 AM7/29/08
to jav...@googlegroups.com
Para ejecutar un .jar (o un .class) necesitas especificar a java donde buscar las clases de las librerías auxiliares mediante la opción "-cp" o en el manifiesto del jar con la opción "Class-Path:". Por ejemplo cuando en tu proyecto (pro.jar) has agregado un jar llamado lib.jar, para ejecutarlo sería algo así como "javaw -cp lib.jar -jar pro.jar"

Pero como usas Fat jar no tienes que hacerlo (creo).

Yo no tengo mucha idea de Jassreport (ninguna),  pero si el archivo .jasper lo cargas tu, es posible que tengas que cambiar la carga del estilo 'File f = new File("algo.jasper");', que no funciona para archivos que estén en el jar, por algo como 'this.getClass().getResource("algo.jasper");'.

Teli

unread,
Jul 29, 2008, 8:12:52 AM7/29/08
to JavaSOS
Si el problema estaba en que no encontraba el fichero .jasper; lo he
cambiado de sitio y ahora funciona a la perfección.

Muchas gracias

Javier Alfonso Bellota de Frutos ha escrito:
> Para ejecutar un .jar (o un .class) necesitas especificar a java donde
> buscar las clases de las librer�as auxiliares mediante la opci�n "-cp" o en
> el manifiesto del jar con la opci�n "Class-Path:". Por ejemplo cuando en tu
> proyecto (pro.jar) has agregado un jar llamado lib.jar, para ejecutarlo
> ser�a algo as� como "javaw -cp lib.jar -jar pro.jar"
>
> Pero como usas Fat jar no tienes que hacerlo (creo).
>
> Yo no tengo mucha idea de Jassreport (ninguna), pero si el archivo .jasper
> lo cargas tu, es posible que tengas que cambiar la carga del estilo 'File f
> = new File("algo.jasper");', que no funciona para archivos que est�n en el

Javier Alfonso Bellota de Frutos

unread,
Jul 29, 2008, 10:09:55 AM7/29/08
to jav...@googlegroups.com
De nada, para eso estamos aquí.

Teli

unread,
Sep 4, 2008, 8:50:22 AM9/4/08
to JavaSOS
He vuelto a tener el mismo problema cuando ejecuto mi fichero .jar
ejecutable creado con eclipse

On 29 jul, 16:09, "Javier Alfonso Bellota de Frutos"

Javier Alfonso Bellota de Frutos

unread,
Sep 4, 2008, 10:14:38 AM9/4/08
to jav...@googlegroups.com
¿creado con el eclipse pero sin Fat jar?

Teli

unread,
Sep 4, 2008, 11:33:27 AM9/4/08
to JavaSOS
Creado con el Fat jar de eclipse

On 4 sep, 16:14, "Javier Alfonso Bellota de Frutos"

Javier Alfonso Bellota de Frutos

unread,
Sep 4, 2008, 11:50:47 AM9/4/08
to jav...@googlegroups.com
No se muy bien como va el fat jar, pero es posible que tengas que añadir al manifiesto la entrada de classpath o que la ruta la hayas cambiado. Si explicas más el problema, por ejemplo copiando aquí lo que pone en el error, o las rutas de los archivos por ejemplo, sería más facil ayudarte.

Teli

unread,
Sep 4, 2008, 12:17:26 PM9/4/08
to JavaSOS
A ver yo al generar el .jar ejecutable con fat-jar le digo cual es la
clase principal. NO me muestra ningun error porque lo que le pasa es
que no carga el fichero .jasper porque la direccion para obtener
el .jasper yo hago lo siguiente:

URL urlFichaMatricula= this.getClass().getResource("./reports/
fichaMatricula.jasper");

if (urlFichaMatricula == null) {
System.out.println("\n No encuentro el archivo del reporte
maestro.");
}
JasperReport report = (JasperReport)
JRLoader.loadObject(urlFichaMatricula);
JOptionPane.showMessageDialog(null, urlFichaMatricula); -> Aqui toma
una direccion muy rara partiendo del fichero .jar
//Preparación de los parámetros
Map<String,Object> parametros = new HashMap<String,Object>();
parametros.put("imagen",(this.getClass().getResource("../../../
icono.jpg")).toString());
JasperPrint print = JasperFillManager.fillReport(report,parametros,
conexion);

// Exporta el informe a PDF
//
JasperExportManager.exportReportToPdfFile(print,"informeAlumnosActivos.pdf");
JasperExportManager.exportReportToPdf(print);

// Para visualizar el pdf directamente desde java
JasperViewer.viewReport(print,false);


On 4 sep, 17:50, "Javier Alfonso Bellota de Frutos"

Javier Alfonso Bellota de Frutos

unread,
Sep 4, 2008, 12:40:38 PM9/4/08
to jav...@googlegroups.com
¿Entonces el error es que te devuelve null en "URL urlFichaMatricula= this.getClass().getResource("./reports/fichaMatricula.jasper");"?

Teli

unread,
Sep 5, 2008, 8:21:38 AM9/5/08
to JavaSOS
Bueno he cambiado un poco el codigo haciendo que se ejecute el .jrxml
desde java para evitar problemas de versiones; una de las cosas es que
me faltaban librerias para poder compilar desde mi aplicacion y
supongo que ahora me debe de estar pasando lo mismo no lo se

La cuestion no es que me devolviera null sino que me devolvia file:/
<ruta> entonces lo que he hecho es quitarle ese principio de la cadena
para que solo me quede la ruta. Pero ahora se me está presentando otro
problema y es


Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError:
org/apache/commons/javaflow/bytecode/Continuable
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at
net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:
402)
at
asturmedia.academiacampa.informes.FichaMatricula.<init>(FichaMatricula.java:
35)
at asturmedia.academiacampa.presentacion.PantallaPrincipal
$62.actionPerformed(PantallaPrincipal.java:5284)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.javaflow.bytecode.Continuable
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 40 more

Surge cuando intenta cargar el fichero compilado.

On 4 sep, 18:40, "Javier Alfonso Bellota de Frutos"

Teli

unread,
Sep 5, 2008, 10:23:46 AM9/5/08
to JavaSOS
Despues de varios cambios realizados, probando cosas, lo que me esta
pasando es esto

net.sf.jasperreports.engine.JRException:
java.io.FileNotFoundException: file:\C:\Academia_Campa.jar!\asturmedia
\academiacampa\informes\reports\fichaMatricula.jrxml (El nombre de
archivo, directorio o etiqueta del volumen no es válido)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(Unknown Source)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(Unknown Source)
at
asturmedia.academiacampa.informes.FichaMatricula.<init>(FichaMatricula.java:
26)
at asturmedia.academiacampa.presentacion.PantallaPrincipal
$62.actionPerformed(PantallaPrincipal.java:5283)
Caused by: java.io.FileNotFoundException: file:\C:\Academia_Campa.jar!
\asturmedia\academiacampa\informes\reports\fichaMatricula.jrxml (El
nombre de archivo, directorio o etiqueta del volumen no es válido)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
... 29 more

porque en el fichero donde estoy generando el informe utilizo la
instruccion
String reportFile =
this.getClass().getResource("reports/fichaMatricula.jrxml").getFile();
JasperDesign objJasperDesign = JRXmlLoader.load(reportFile);
System.out.println(reportFile);
JasperReport objJasperReport =
JasperCompileManager.compileReport(objJasperDesign);

Map<String,Object> parametros = new HashMap<String,Object>();
parametros.put("imagen",(this.getClass().getResource("../../../
icono.jpg")).toString());
System.out.println("Despues de los parametros");
JasperPrint objJasperPrint =
JasperFillManager.fillReport(objJasperReport, parametros, conexion);
System.out.println("Despues de los Print");
JasperExportManager.exportReportToPdf(objJasperPrint);
JasperViewer.viewReport(objJasperPrint,false);

El problema supongo es que no se obtener las rutas relativas o que al
crear el .jar con la herramiento FatJar me falta algun parametro no lo
se

Y perdon por ser tan pesada pero es que al no tener mucha idea pues
por eso enseguida tiro de la gente que creo que me puede ayudar; y
también es un poco complicado explicar por aqui todas las pruebas que
he realizado.

Marcelo Velazquez

unread,
Sep 5, 2008, 2:02:05 PM9/5/08
to jav...@googlegroups.com
te esta dando un error por la mal descripcion de la etiqueta de volumen
\C:\Academia_Campa.jar!\asturmedia
\academiacampa\informes\reports\fichaMatricula.jrxml
 
esto deveria quedar algo asi
 
C:\Academia_Campa.jar\asturmedia\academiacampa\informes\reports\fichaMatricula.jrxml
saludos!!
 
fijate paso por paso la ejecucion, usa breakpoint si es nesesario de los datos que esta utilizando el proceso
cualquier duda deja mas datos!
2008/9/5 Teli <esther...@hotmail.com>

Teli

unread,
Sep 9, 2008, 2:19:02 AM9/9/08
to JavaSOS
Y que es eso de la mala descripcion del volumen no se a que te
refieres; supongo que la solución a este problema será que use
direcciones relativas en lugar de absolutas; pero la verddad q no
tengo ni idea de como solucionarlo

On 5 sep, 20:02, "Marcelo Velazquez" <mvelazque...@gmail.com> wrote:
> te esta dando un error por la mal descripcion de la etiqueta de volumen
> \C:\Academia_Campa.jar!\asturmedia
> \academiacampa\informes\reports\fichaMatricula.jrxml
>
> esto deveria quedar algo asi
>
> C:\Academia_Campa.jar\asturmedia\academiacampa\informes\reports\fichaMatric­ula.jrxml
>
> saludos!!
>
> fijate paso por paso la ejecucion, usa breakpoint si es nesesario de los
> datos que esta utilizando el proceso
> cualquier duda deja mas datos!
> 2008/9/5 Teli <estherseca...@hotmail.com>
> > net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.­java:
> > > > this.getClass().getResource("./reports/fichaMatricula.jasper");"?- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -
Reply all
Reply to author
Forward
0 new messages