Cómo establecer una ruta de clases relativa para los informes de Jasper

Estoy creando un informe jasper desde una aplicación swing. Funciona bien cuando se establece la ruta absoluta pero no genera una para una ruta relativa. El código Java para generar el código es

 JasperDesign jd= JRXmlLoader.load("relative path");

    String sql = "";
    JRDesignQuery newQuery= new JRDesignQuery();
    newQuery.setText(sql);
    jd.setQuery(newQuery);
    JasperReport JASP_REP= JasperCompileManager.compileReport(jd);
    JasperPrint JASP_PRINT= JasperFillManager.fillReport(JASP_REP,null,conn);
    JasperViewer.viewReport(JASP_PRINT,false);

Cada vez que intento con la ruta absoluta, se producen errores. El código xml para la fuente de datos es

<defaultValueExpression >
        <![CDATA["reports/report1.jasper"]]>
    </defaultValueExpression>

Pero muestra el siguiente error

java.io.FileNotFoundException: reports/report1.jasper (The system cannot find the path specified)

Tengo algunas sugerencias de

http://forums.devshed.com/java-help-9/relative-path-for-subreport-in-jasperreport-309313.html

pero ninguno está ayudando en este escenario.

preguntado el 16 de abril de 13 a las 08:04

¿Dónde se encuentra su archivo jrxml? -

ejemplo agregado como comentario -

1 Respuestas

Si esta trabajando con Jasper Swing aplicación, entonces es una buena práctica que la ruta debe ser absoluta. Solo compila todo .jrxml a archivos .jasper archivos y carga compilados .jasper archivo siempre. Es rápido.

crear carpeta como jaspers, images, styles fuera de la aplicación. y crear system/environment variable como a continuación.

JASPERDIR = "c:\\app\\jaspers";
STYLES = "c:\\app\\styles";
IMAGES="c:\\app\images";

Ahora en su aplicación swing Use el System.getenv() método, pasando el nombre de la variable para leer la ruta.

De esta manera su aplicación swing es lo suficientemente flexible cada vez. Tu puedes cambiar images, styles, .jasper archivos en cualquier momento sin reiniciar su aplicación swing.

Respondido 16 Abr '13, 08:04

@Firefly.... gracias por tu respuesta... ¿puedes dar más detalles sobre el método System.getenv() (puede ser un fragmento)? Habiendo creado las variables de entorno, no puedo acceder a ellas usando el método - tamal

RightClick-MyComputer-properties-AdvanceTab-EnvironmentVariable. Ahora haga clic en nuevo y ponga el nombre de la variable como JASPERDIR y valor variable como "c:\\app\\jaspers";. Ahora lo más importante es reiniciar eclipse. escriba una clase de cliente simple y en el método principal escriba el código a continuación System.out.println(System.getenv("JASPERDIR")); - Rais Alam

Gracias... me ayudó a entender los problemas con mi código... !! estoy seguro de que esto va a funcionar..pulgares arriba..!! - tamal

Encantado de escuchar esto. Si te gusta la respuesta, acéptala y vota a favor. - Rais Alam

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.