Jump to content

Jasper don't work when obfuscating with Proguard.


damugar

Recommended Posts

Hi everybody.

I have problem obfuscating my application with Proguard. Without obfuscating, all works all right and the reports are shown. However, after obfuscating with Proguard, all the application works normally except for reports. When I try to compile and visualize them, the application doesn not show anything, and there is no error.

The fail is at the moment I call this:

JasperHelper.generarInformeModal(AraperMainFrame.getInstance(), is, parameters, centrosSeleccionados, "swapFile", AsociarDatosMode.MODE_VISUALIZE, AraperVariables._anchoListadoVertical);

The report doesn not appear and no error is shown. I write the JasperHelper class too. Please I need help to resolve this.

Thanks in advance,
david.

 

 

Code:
public class JasperHelper {    //constantes que se utilizan en la virtualizacion de los informes, son los tres tipos posibles    private static final String VIRTUALIZER_FILE = "file";    private static final String VIRTUALIZER_SWAP_FILE = "swapFile";    private static final String VIRTUALIZER_GZIP = "gZip";    public JasperHelper() {    }    /**     * para generar el informe cuando tenemos ventanas modales por detrás     * si no el informe se queda por detrás y es imposible devolverle el foco a no ser que cerremos todas la ventanas modales     * se pasan como parametros el frame, el listado is, los parametros, la lista que va a rellenar el listado     * el quinto parametro es el virtualizerType que puede valer "file", "swapFile" o "gZip", luego se pasa el modo de visualizacion,     * imprimir o imprimirPDF (que viene dado en AsociarDatosMode), y por ultimo si es horizontal o vertical (toma los valores de AraperVariables: _anchoListadoHorizontal     * y _anchoListadoVertical)     */    public static void generarInformeModal(InputStream is, Map parameters, List lista, String virtualizerType, Enum modoImprimir, int widthSize) throws ReportException {        try {            System.out.println("Entramos en generarInformeModal");            String temp = GabilosActivator.getProgramPath()+ "/tmplist";            System.out.println("Ya tenemos la carpeta temporal " + temp);            //directorio auxiliar donde se crearan los ficheros temporales que se necesitan en el caso de la virtualizacion            File temporalDir = new File(temp);            //si el numero de registros a mostrar en el informe es grande utilizamos el metodo de virtualizacion que genera una serie de ficheros            //temporales para evitar que no se cuelgue la aplicación. Añade un parametro mas a parameters            if (lista.size() > AraperVariables._numeroRegistrosListado) {                //creando el directorio temporal                if (!temporalDir.exists() || !temporalDir.isDirectory()) {                    temporalDir.mkdir();                } else {                    GabilosUtils.deleteDirectory(temporalDir);                    temporalDir.mkdir();                }                // Virtualization works only with in memory JasperPrint objects.                // All the operations will first fill the report and then export the filled object.                // crear el virtualizador                JRAbstractLRUVirtualizer virtualizer = null;                if (VIRTUALIZER_FILE.equals(virtualizerType)) {                    // creating the virtualizer. el primer parametro indica el nº de paginas para mantener en memoria                    //y el segundo el directorio en el cual se guardan                    virtualizer = new JRFileVirtualizer(10, temp);//            virtualizer = new JRFileVirtualizer(100, temporalDir);                    parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);                } else if (VIRTUALIZER_SWAP_FILE.equals(virtualizerType)) {                    //creating the virtualizer. Crea un solo fichero                    //Parameters of JRSwapFile:                    //directory - the directory where the file should be created.                    //blockSize - initial file size in number of blocks, the size of the blocks allocated by the swap file                    //minGrowCount - the extension size for the JRSwapFile, the minimum number of blocks by which the swap file grows when full//                JRSwapFile swapFile = new JRSwapFile(temp, 1024, 1024);                    JRSwapFile swapFile = new JRSwapFile(temp, 1024, 100);                    //Parameters of JRSwapFileVirtualizer:                    //maxSize - the maximum size (in JRVirtualizable objects) of the paged in cache.                    //swap - the swap file to use for data virtualization                    //swapOwner - whether the virtualizer is the owner (single user) of the swap file. If true, the virtualizer will dispose the swap file on cleanup.//                virtualizer = new JRSwapFileVirtualizer(100, swapFile, true);                    virtualizer = new JRSwapFileVirtualizer(2, swapFile, false);                    parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);                } else if (VIRTUALIZER_GZIP.equals(virtualizerType)) {                    //creating the virtualizer.                    //Parameter: the maximum size (in JRVirtualizable objects) of the paged in cache                    //this virtualizer does not write the data into files, it compresses the jasper print object using the Gzip algorithm and reduces                    //the memory consumption in the heap memory                    virtualizer = new JRGzipVirtualizer(2);                    parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);                }                if (virtualizer != null) {                    virtualizer.setReadOnly(true);                }            }            if (modoImprimir.equals(AsociarDatosMode.MODE_VISUALIZE)) {                System.out.println("Se va a generar el informe.");                generarInformeModal(is, parameters, lista, widthSize);            } else if (modoImprimir.equals(AsociarDatosMode.MODE_PRINT)) {//                printInforme(is, parameters, lista);            } else if (modoImprimir.equals(AsociarDatosMode.MODE_PRINT2PDF)) {//                generarInformePDF(is, parameters, lista);            }            //chus: este metodo borra un directorio y lo de dentro. Intento borrarlo aqui pero no hace caso, deben            //estar en uso los ficheros. Con la opción VIRTUALIZER_FILE si que lo borra            GabilosUtils.deleteDirectory(temporalDir);//            File temporalDir2 = new File("C:/tmp22");//            GabilosUtils.deleteDirectory(temporalDir2);//            deleteDir(temporalDir);            Runtime.getRuntime().gc();        } catch (Exception e) {            e.printStackTrace();            throw new ReportException(e);        }    }    /**     * para generar el informe cuando tenemos ventanas modales por detrás y se deba ver EN HORIZONTAL el listado. Se pasa como último parámetro el ancho de la ventana.     * si no el informe se queda por detrás y es imposible devolverle el foco a no ser que cerremos todas la ventanas modales     */    public static void generarInformeModal(InputStream is, Map parameters, List lista, int widthSize) throws ReportException {        try {            GabilosDialog viewer = new GabilosDialog();            viewer.setModal(true);//            viewer.setLocationRelativeTo(null);            viewer.setLocation(0, 0);            // visualizamos el informe            JasperPrint jasperPrint = null;            System.out.println("Se compila el informe.");            JasperReport jasperReport = JasperCompileManager.compileReport(is);            if (AraperGuiControl.getInstance().getBarraProgreso().isVisible()) {                System.out.println("Se rellena el informe.");                jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(lista));                System.out.println("Se visualiza el informe.");                JRViewer jrViewer = new JRViewer(jasperPrint);                viewer.getContentPane().add(jrViewer);                if (widthSize == 1000) {                    viewer.setSize(widthSize, 743);                    //si es horizontal especificamos el zoom con el que queremos que aparezca el listado                    jrViewer.setZoomRatio(new Float(0.7929));                } else {                    //si es vertical especificamos el zoom con el que queremos que aparezca el listado                    // miramos primero la altura de la aplicación, para saber nuestra resolución de pantalla                    Toolkit tk = Toolkit.getDefaultToolkit();                    java.awt.Dimension tamano = tk.getScreenSize();                    // la altura de la ventana del informe será 25 pixeles inferior a la altura de la resolución de la pantalla,                    // debido a dimensiones del informe y descontar la barra de tareas de abajo (suponiendo que ésta es una línea y no es más grande)                    if (tamano.getHeight() == 768) {                        viewer.setSize(widthSize, 743);                        jrViewer.setZoomRatio(new Float(0.5603));                    } else if (tamano.getHeight() == 864) {                        viewer.setSize(widthSize, 839);                        jrViewer.setZoomRatio(new Float(0.6458));                    } else if (tamano.getHeight() == 900) {                        viewer.setSize(widthSize, 875);                        jrViewer.setZoomRatio(new Float(0.6779));                    } else if (tamano.getHeight() == 960) {                        viewer.setSize(widthSize, 935);                        jrViewer.setZoomRatio(new Float(0.7313));                    } else if (tamano.getHeight() == 1024) {                        viewer.setSize(widthSize, 999);                        jrViewer.setZoomRatio(new Float(0.7856));                    } else if (tamano.getHeight() == 1050) {                        viewer.setSize(widthSize, 1025);                        jrViewer.setZoomRatio(new Float(0.8115));                    } else {                        viewer.setSize(widthSize, 768);                        jrViewer.setZoomRatio(new Float(0.7815));                    }                }                //con setFitPageZoomRatio saca el zoom al 100% en la ventana que tengamos, saca scroll horiz y vertical                //probe con estas dos siguientes sentencias para ver si ajustaba el tamaño del informe al de la ventana pero siempre lo                //sacaba al 100%    //            jrViewer.setFitPageZoomRatio();    //            jrViewer.setFitWidthZoomRatio();                //ocultamos la barra de progreso                AraperGuiControl.getInstance().hideProgressBar();                viewer.setVisible(true);                jrViewer = null;            }            jasperPrint = null;            jasperReport = null;            viewer = null;            Runtime.getRuntime().gc();        } catch (Exception e) {            e.printStackTrace();            throw new ReportException(e);        }    }}
Link to comment
Share on other sites

  • Replies 2
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...