Foros del Web » Programación para mayores de 30 ;) » Java »

Error generando un report en java

Estas en el tema de Error generando un report en java en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 02/07/2008, 03:06
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 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
  #2 (permalink)  
Antiguo 02/07/2008, 08:28
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Error generando un report en java

Prueba aumentandole la memoria a la maquina virtual de java, lo que pasa es que estas almacenando muchos objetos en memoria y la maquina virtual tiene un limite.

Praa aumentarle la memoria ve a la linea de comandos y escribe:

<JAVA_HOME>/bin/java -Xms1024M -Xmx1024M

donde <JAVA_HOME> es el directorio donde tienes instalado java.

saludos!!
  #3 (permalink)  
Antiguo 02/07/2008, 08:33
Avatar de djagu_26  
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: Error generando un report en java

Aumentar la memoria es un solucion parcial, no te lo aconsejo, porq no pones la sql esa dentro del reporte mismo? y solo le pasas parametros

saludos
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:15.