02/07/2008, 03:06
|
| | Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 10 meses Puntos: 0 | |
Error generando un report en java Hola:
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:
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)
Por si les aclara algo les adjunto el código:
Código:
//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
La linea en negrita es donde salta el error
Muchas gracias
Última edición por laura_morgar; 02/07/2008 a las 03:13 |