Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Llamar a Reportes

Hola, de nuevo, tengo un problema con reportes. Cuestion es que he instalado Ireport, hice los reportes correspondientes que necesitaba, los mismos se guardaron dentro de mi proyecto, como si fueran JFrame(se guardaron dos, uno con extension jrxml y otro con .jasper, sólo se ejecuta el .jrxml).
El tema es que nose como llamarlos, para que cuando yo presione un JButton(Ver informe), me muestre el reporte correspondiente.
Busque por internet, y coloque estas librerias que me decian que si o si debian estar:
import java.net.URL;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
Lo que nose porque me figura como error sobre estas librerias que el paquete no existe, siendo que instale el drive y las librerias para jasperReport version 5.1, que tambien baje de internet.
Y este es el codigo que me dijeron que debia escribir en el boton:
JasperReport reporte = (JasperReport) JRLoader.loadObject("reporte1.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, conexion);

JRExporter exporter = new JRPdfExporter();

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reportePDF.pdf"));
exporter.exportReport();

Si pudieran decirme si esta bien o me falta alguna cosa mas? y porque no me reconoce las clases de arriba.
Gracias

mayo 25, 2014 | Unregistered Commenterlatinjava

¿Las librerías están en el classpath del proyecto?.
Es mejor dejar que NetBeans importe lo necesario, a usar líneas de import copiadas.
Si NetBeans detecta errores de ese tipo, es que no encuentra los packages o las clases en el classpath del proyecto.

mayo 26, 2014 | Registered Commenterchoces

Hola choces, coloque de nuevo las librerias, el archivo jar, en el paquete Libraries de mi proyecto y no dio mas error con el paquete.

Lo que si, el codigo para llamar al reporte, lo hice en un metodo en mi clase Conexion, Asi no tengo problemas con ella. No da error en la sintaxis, pero cuando lo ejecuto al frame y llamo al metodo, muestra varias excepciones, creo que debe ser algo con respecto a la direccion o por ahi, porque no muestra nada.
En internete vi, otros tipos de codigo, pero no me funcionan.
La mayoria de mis informes los hice con las librerias Itext, me resultan mas comodos, pero ahora debo hacer un informe en el cual se le deben ingresar parametros, y como no sé hacerlo con itext(solo hago consultas simples, un select o join y nada mas), dispuse hacerlo con Ireport, que es mas facil de usar para los informes, el problema aqui, es el metodo para llamarlo desde mi frame.
Esto es lo que me muestra de error:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:68)
at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:68)
at Controlador.Conexion.EjecutarReporte(Conexion.java:77)
at Vistas.Consultas.jButton1ActionPerformed(Consultas.java:327)
at Vistas.Consultas.access$300(Consultas.java:30)
at Vistas.Consultas$4.actionPerformed(Consultas.java:242)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 41 more

mayo 26, 2014 | Unregistered Commenterlatinjava

Vista esta excepción:
NoClassDefFoundError: org/apache/commons/logging/LogFactory

Creo que necesitas añadir la librería:
http://commons.apache.org/proper/commons-logging/download_logging.cgi

mayo 26, 2014 | Registered Commenterchoces

Mira, me muestra esto
Binaries
commons-logging-1.1.3-bin.tar.gz md5 pgp
commons-logging-1.1.3-bin.zip md5 pgp
Source
commons-logging-1.1.3-src.tar.gz md5 pgp
commons-logging-1.1.3-src.zip md5 pgp

Debo instalar todos estos? como no entiendo mucho el ingles, debo usar el traductor

mayo 26, 2014 | Unregistered Commenterlatinjava

commons-logging-1.1.3-bin.zip

mayo 26, 2014 | Registered Commenterchoces

ya lo agrege, no da error, pero no me muestra nada. Asi que puse este otro codigo para llamar al reporte

public void runReporte()
{
try
{
String fileName = System.getProperty("user.dir") +"/src/ReportePrueba.jrxml";

if (fileName == null)
{
System.out.println("No encuentro el archivo del reporte.");
System.exit(2);
}


File theFile = new File(fileName);
JasperReport reporte = (JasperReport) JRLoader.loadObject("theFile");
JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, con);
JasperViewer jviewer = new JasperViewer(jasperPrint,false);
jviewer.setTitle("Sistema de gestión");
jviewer.setVisible(true);

}
catch (Exception j)
{
System.out.println("Mensaje de Error:"+j.getMessage());
}
}

y me muestra este error: Mensaje de Error:java.io.FileNotFoundException: theFile
Este codigo tambien lo encontre gogleando, asi que nose si está bien. Gracias por el aguante.

mayo 26, 2014 | Unregistered Commenterlatinjava

Estás haciendo ésto:

File theFile = new File(fileName);
JasperReport reporte = (JasperReport) JRLoader.loadObject("theFile");

Sin embargo, al método loadObject no le estás pasando un parámetro válido: "theFile" (no es una ruta válida de archivo)
En tu caso, debería ser:
JasperReport reporte = (JasperReport) JRLoader.loadObject(theFile);

mayo 27, 2014 | Registered Commenterchoces

ya lo cambie, y da como que no puede cargar el archivo
Mensaje de Error:Error loading object from file : D:\ProyectoOdonto\src\ReportePrueba.jrxml
y la direccion esta bien, puse el reporte en la carpeta src, que me dijeron que es la raiz del proyecto, que siempre busca en esa carpeta.

mayo 27, 2014 | Unregistered Commenterlatinjava

Usa esto para poder ver la traza completa de la excepción:

catch (Exception j)
{
System.out.println(j);
}
}

mayo 27, 2014 | Registered Commenterchoces

si, ya estaba hecho el catch, y esto es lo que muestra:
Mensaje de Error:Error loading object from file : D:\ProyectoOdonto\src\ReportePrueba.jrxml

mayo 27, 2014 | Unregistered Commenterlatinjava

Esto muestra:
net.sf.jasperreports.engine.JRException: Error loading object from file : D:\ProyectoOdonto\src\ReportePrueba.jrxml

mayo 27, 2014 | Unregistered Commenterlatinjava

No conozco bien JasperReport, pero creo que antes debes compilarlo.

JasperReport report=JasperCompileManager.compileReport(fileName);

http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperCompileManager.html#compileReport(java.lang.String)

mayo 27, 2014 | Registered Commenterchoces

Sigo intentando, que mi aplicacion me muestre el reporte diseñado, Cambie a una version anterior del iReport, porque me decian que podia ser la version.
Este es el codigo que uso para llamarlo, en donde me va indicando en que paso se detiene o da error:
public void correrReporte(String fecha)
{
// String ruta = System.getProperty("user.dir") +"/src/Vistas/ReportePrueba.jasper";
String ruta="D:\\TecnicaturaProgramacion\\PracticaSupervisada\\ProyectoOdontoSys\\src\\Vistas\\ReporteTurno1.jasper";

if (ruta == null)
{
System.out.println("paso1");
System.out.println("No se ubica el archivo del reporte .");
System.exit(2);
}

JasperReport masterReport = null;
System.out.println("paso2");
try
{

System.out.println("paso3");

masterReport = (JasperReport) JRLoader.loadObject(ruta);
System.out.println("paso4");
} catch (JRException e) {
System.out.println("paso5");
System.out.println("Error cargando el reporte : " + e.getMessage());
e.printStackTrace();
System.exit(3);
}

System.out.println("paso6");
JasperPrint jasperPrint=null;
try
{
Map parametro= new HashMap();
parametro.put("FechaTurno",fecha);
jasperPrint= JasperFillManager.fillReport(masterReport, parametro,con);
System.out.println("paso7");
} catch (Exception e)
{
e.printStackTrace();
}
//Se lanza el Viewer de Jasper, no termina aplicación al salir

try
{
JasperViewer jviewer = new JasperViewer(jasperPrint, false);
System.out.println("paso8");

System.out.println("paso9");
jviewer.setVisible(true);
System.out.println("paso10");
} catch (Exception j)
{
System.out.println("Mensaje de Error : " + j.getMessage());
System.out.println("Mensaje de Error : " + j.getLocalizedMessage());
j.printStackTrace();
}
}
pero al ejecutarlo me da este error, que es que no encuentra una clase,pero segun investigando, es una clase para aplicaciones web y mi aplicacion es de escritorio, que puedo haber hecho mal, o porque me sale este error:
paso2
paso3
paso4
paso6
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/servlet/ServletOutputStream
at net.sf.jasperreports.web.util.WebResourceHandlersExtensionRegistryFactory.<clinit>(WebResourceHandlersExtensionRegistryFactory.java:47)
at net.sf.jasperreports.web.util.WebResourceHandlersExtensionRegistryFactory.<clinit>(WebResourceHandlersExtensionRegistryFactory.java:47)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at net.sf.jasperreports.engine.util.JRClassLoader.loadClassForRealName(JRClassLoader.java:157)
at net.sf.jasperreports.engine.util.JRClassLoader.loadClassForName(JRClassLoader.java:115)
at net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:53)
at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.instantiateRegistry(DefaultExtensionsRegistry.java:237)
at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.loadRegistries(DefaultExtensionsRegistry.java:214)
at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.loadRegistries(DefaultExtensionsRegistry.java:162)
at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getRegistries(DefaultExtensionsRegistry.java:133)
at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(DefaultExtensionsRegistry.java:105)
at net.sf.jasperreports.engine.util.JRStyledTextParser.<clinit>(JRStyledTextParser.java:83)
at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:123)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:88)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:103)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:61)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:179)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:81)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:849)
at Controlador.Conexion.correrReporte(Conexion.java:188)
at Vistas.Turnos.jButton1ActionPerformed(Turnos.java:1410)
at Vistas.Turnos.access$1700(Turnos.java:41)
at Vistas.Turnos$21.actionPerformed(Turnos.java:1017)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletOutputStream
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 60 more

Puse todo por las dudas, asi, si podes ver bien en donde esta el problema

junio 5, 2014 | Unregistered Commenterlatinjava

Prueba a añadir esta librería: servlet-api-2.4.jar

junio 5, 2014 | Registered Commenterchoces