Estoy trabajando en la creación de reports con el programa ireport y hago la llamada desde el netbeans en java, pero en el momento de cargar los datos de la base de datos en mysql se queda colgado un rato y luego da el siguiente error en la ejecución:
Código:
Por si les aclara algo les adjunto el código:02-jul-2008 10:38:55 net.sf.jasperreports.engine.fill.JRFillSubreport prepare GRAVE: Fill 24347419: exception java.lang.OutOfMemoryError: Java heap space at java.text.RuleBasedBreakIterator.readTables(RuleBasedBreakIterator.java:410) at java.text.RuleBasedBreakIterator.<init>(RuleBasedBreakIterator.java:308) at java.text.BreakIterator.createBreakInstance(BreakIterator.java:584) at java.text.BreakIterator.getBreakInstance(BreakIterator.java:541) at java.text.BreakIterator.getLineInstance(BreakIterator.java:468) at java.text.BreakIterator.getLineInstance(BreakIterator.java:455) at java.awt.font.LineBreakMeasurer.<init>(LineBreakMeasurer.java:259) at net.sf.jasperreports.engine.fill.TextMeasurer.renderParagraph(TextMeasurer.java:330) at net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:291) at net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:987) at net.sf.jasperreports.engine.fill.JRFillTextField.prepare(JRFillTextField.java:542) at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:344) at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:346) at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:305) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:1382) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:692) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportContent(JRVerticalFiller.java:275) Mensaje de Error:java.lang.OutOfMemoryError: Java heap space at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:117) Conexión cerrada con éxito at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:879) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:782) at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:532) at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:63) at net.sf.jasperreports.engine.fill.JRThreadSubreportRunner.run(JRThreadSubreportRunner.java:209) at java.lang.Thread.run(Thread.java:619)
Código:
La linea en negrita es donde salta el error//imports public class Report1 extends Thread { cConnection conexion; public void run () { try{ String urlMaestro = "C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4.jasper"; String urlSubreporte = "C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4_subreport0.jasper"; //URL urlMaestro = this.getClass().getResource("C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4.jasper"); //URL urlSubreporte = this.getClass().getResource("C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4_subreport0.jasper"); if (urlMaestro == null) { System.out.println("No encuentro el archivo del reporte maestro."); System.exit(2); } if (urlSubreporte == null) { System.out.println("No encuentro el archivo del subreporte."); System.exit(2); } JasperReport masterReport = null; try { masterReport = (JasperReport) JRLoader.loadObject(urlMaestro); } catch (JRException e) { System.out.println("Error cargando el reporte maestro: " + e.getMessage()); System.exit(3); } JasperReport subReport = null; try { subReport = (JasperReport) JRLoader.loadObject(urlSubreporte); } catch (JRException e) { System.out.println("Error cargando el subreporte: " + e.getMessage()); System.exit(3); } //Ruta del archivo jasper // String fileName = "C:/Archivos de programa/JasperSoft/iReport-3.0.0/Reporte modelo3005_version4.jasper"; //Obtener una conexion a la base de datos conexion = new cConnection(); Connection con = conexion.mkConection(); ResultSet rs = null; Statement stm = con.createStatement(); String strSQL = "SELECT Budget.Project,Company.IdentityCard,Company.FullName,Company.Name,Expenditures.Budget," + "Expenditures.Hito,Expenditures.Description,Expenditures.UnitCost,Expenditures.Units,Expenditures.Quota," + "Project.Code,Project.Acronym,Project.Title,Project.Company FROM Budget,Company,Expenditures,Project " + "WHERE Budget.Project=\'ABCDEFG\' AND Budget.Date=\'2008-01-01\';"; //Ejecuta la consulta SQL rs = stm.executeQuery(strSQL); rs.next(); String budgetProject = rs.getString("Project"); String cif = rs.getString("IdentityCard"); String fullname = rs.getString("FullName"); String name = rs.getString("Name"); int budgetexpenditures = rs.getInt("Budget"); int hito = rs.getInt("Hito"); String descripcion = rs.getString("Description"); double unitcost = rs.getDouble("UnitCost"); double units = rs.getDouble("Units"); double quota = rs.getDouble("Quota"); String codigo = rs.getString("Code"); String acronimo = rs.getString("Acronym"); String titulo = rs.getString("Title"); int comp = rs.getInt("Company"); System.out.println("Titulo: "+titulo+" Comp: "+comp); //Trabajar con el result set… strSQL = "SELECT FullName FROM Company WHERE EN="+comp+";"; rs = stm.executeQuery(strSQL); rs.next(); String company = rs.getString("FullName"); //Cerrar todo rs.close(); stm.close(); //Pasamos parametros al reporte Map parameters=new HashMap(); parameters.put("Project",budgetProject); parameters.put("IdentityCard",cif); parameters.put("Name",name); parameters.put("Budget",budgetexpenditures); parameters.put("Hito",hito); parameters.put("Descripction",descripcion); parameters.put("UnitCost",unitcost); parameters.put("Units",units); parameters.put("Quota",quota); parameters.put("FullName",company); parameters.put("Code",codigo); parameters.put("Acronym",acronimo); parameters.put("Title",titulo); parameters.put("Company",comp); parameters.put("SUBREPORT",subReport); parameters.put("CODE","ABCDEFG"); try{ //Preparación del reporte (reporte diseñado con ireport) JasperPrint jasperPrint=JasperFillManager.fillReport(masterReport,parameters,con); //Se lanza el viewer de jasper, no termina la aplicación al salir JasperExportManager.exportReportToPdfFile(jasperPrint, "H:/reportes/Reportes en pdf/Reporte.pdf"); //Se lanza el Viewer de Jasper, no termina aplicación al salir JasperViewer jviewer = new JasperViewer(jasperPrint,false); jviewer.setVisible(true); //jviewer.show(); }catch (JRException e) { System.out.println("Error llenando el reporte maestro: " + e.getMessage()); try { con.close(); } catch (SQLException e1) {} System.exit(5); } }catch(Exception j){ System.out.println("Mensaje de Error:"+j.getMessage()); } finally{ conexion.closeConnection(); } } public static void main(String[] args){ Report1 thread_exp = new Report1(); thread_exp.run(); } } class cConnection { //hace la conexión a la bbdd } //Obtiene una conexión con el nombre del driver especificado public Connection mkConection() { .... } // Cerrar la conexión. public boolean closeConnection() { .... } }//class cConnection
Muchas gracias