[RESOLVIDO]Como abrir um arquivo .jasper por uma aplicacao java Desktop?

12 respostas
T

Olá pessoal.
Gostaria de saber como faço para abrir um relatorio do ireport por uma aplicação java Desktop.

Eu já uso ireports, porém utilizava o JasperServer para disponibilizar os relatórios… Me foi pedido agora uma aplicação .jar para executar os relatorios… alguem pode me passar um exemplo ?

Vlw

12 Respostas

U

E pra web mais serve tbm pra Desktop e so vc fazer pequenas alterações!!
http://guj.com.br/posts/list/141363.java
vlw
abs

T

Hum, tem diversos tópicos que ajudei a galera…

Pesquise por Ireport, Jasper… ali no search do Forum
que vai encontrar muitos exemplos :wink:

Att. Jonas

T

Opa fiz aqui uma tentativa mas está dando erro

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.*;

/**
*
* @author Administrador
*/
public class ChamaReport {

    private static Connection getConnection() throws
        ClassNotFoundException, SQLException {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/schem_tst";
        String user = "root";
        String password = "senharoot";

        Class.forName(driver);
        Connection con = DriverManager.getConnection(url, user, password);
        return con;
    }

    public static void main(String[] args) throws JRException, Exception {
        new ChamaReport().gerar();
    }

  
public JasperPrint gerar() throws JRException, SQLException, ClassNotFoundException {
		JasperPrint rel = null;
		try {
			Connection con = getConnection();
			HashMap map = new HashMap();
			String arquivoJasper = "teste.jasper";
			rel = JasperFillManager.fillReport(arquivoJasper, map, con);
		} catch (JRException e) {
			JOptionPane.showMessageDialog(null,e.getMessage());
		}
		return rel;
	}
}
Exception in thread main java.lang.NoClassDefFoundError: org/apache/commons/digester/Rule

at net.sf.jasperreports.components.ComponentsExtensionsRegistryFactory.(ComponentsExtensionsRegistryFactory.java:83)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:247)

at net.sf.jasperreports.engine.util.JRClassLoader.loadClassForRealName(JRClassLoader.java:157)

at net.sf.jasperreports.engine.util.JRClassLoader.loadClassForName(JRClassLoader.java:115)

at net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:53)

at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.instantiateRegistry(DefaultExtensionsRegistry.java:198)

at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.loadRegistries(DefaultExtensionsRegistry.java:175)

at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.loadRegistries(DefaultExtensionsRegistry.java:135)

at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getRegistries(DefaultExtensionsRegistry.java:121)

at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(DefaultExtensionsRegistry.java:98)

at net.sf.jasperreports.engine.util.JRStyledTextParser.(JRStyledTextParser.java:76)

at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:174)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:74)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:56)

at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:143)

at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:53)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247)

at br.ce.hemoce.funcoes.ChamaReport.gerar(ChamaReport.java:55)

at br.ce.hemoce.funcoes.ChamaReport.main(ChamaReport.java:35)

Caused by: java.lang.ClassNotFoundException: org.apache.commons.digester.Rule

at java.net.URLClassLoader$1.run(URLClassLoader.java:200)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

at java.lang.ClassLoader.loadClass(ClassLoader.java:303)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)

 21 more

Java Result: 1
T

Acrescente a lib commons-digester no build patch

que se encontra no diretorio de instalacao do iReport

T

Opa vlw.
Deu outro erro aqui… provavelmente outra lib

Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.control.CompilationFailedException

vou dar uma pesquisada se achar posto aqui pessoal.

T

Acho que achei…

Tem uma lista de libs para importar

groovy-all-X.X.X
commons-beanutils
commons-collections
commons-digester
commons-javaflow
commons-lologging-api
itext
jasperreports

T

Sim. Sao varias libs que devem estar no build patch

T

Opa cara deu certinho aqui...
criou relatorio sem pagina.. mas isso eu vou ver depois =D

segue o código.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.*;

/**
*
* @author Administrador
*/
public class ChamaReport {

    private static Connection getConnection() throws
        ClassNotFoundException, SQLException {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/schema";
        String user = "root";
        String password = "senha";

        Class.forName(driver);
        Connection con = DriverManager.getConnection(url, user, password);
        return con;
    }

    public static void main(String[] args) throws JRException, Exception {
        new ChamaReport().geraRelatorio();
    }

    private void geraRelatorio() throws JRException, SQLException, ClassNotFoundException {
        HashMap map = new HashMap();
        String arquivo = "teste.jasper";
        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(arquivo);
        
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map,ChamaReport.getConnection());
        
        JasperViewer jrviewer = new JasperViewer(jasperPrint, false);
        jrviewer.setVisible(true);
    }

}

Foi necessário realmente importar todas aquelas libs

T

Sim, as libs são fundamentais.

Att. Jonas

S

Oi amigo, estou com o mesmo problema, o meu relatorio abre so dentro do NetBeans, quando rodo a aplicação compilada ele nao aparece. Sobre estas libs, em que pasta elas devem ficar? na pasta do C:\Arquivos de Programas\Java\jdk1.6_22\jre\lib\ext ou na pasta build do meu projeto? Obrigado

R

thiagofacanha:
Acho que achei…

Tem uma lista de libs para importar

groovy-all-X.X.X
commons-beanutils
commons-collections
commons-digester
commons-javaflow
commons-lologging-api
itext
jasperreports

Só pra complementar, pra quem precisar: para salvar os relatórios em PDF, é necessário também importar o ‘iText-X.X.X’.

S

Consegui resolver o problema, só estava faltando o operador + e tudo deu certo, 100% funcionando.
O programa não me pergunta qual pag eu quero imprimir, mas imprime o numero que eu colocar no campo Numero do Pag do formulário Escolhe Pagamento. Perfeito.

Segue o código. Talvez possa servir para outra pessoa.

package Relatorios;

import Utilitarios.Conexao;

import java.util.HashMap;

import javax.swing.JOptionPane;

import net.sf.jasperreports.engine.JRResultSetDataSource;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperReport;

import net.sf.jasperreports.engine.util.JRLoader;

import net.sf.jasperreports.view.JasperViewer;

public class AutCaixa{

Conexao con = new Conexao();

public AutCaixa(){

try
{

con.conecta();

con.executeSQL("select * from pagamentos where numero_pag= " + Formularios.EscolhePagamento.tf_pag.getText());

HashMap parametro = new HashMap();

parametro.put(P_CODIGO, Formularios.EscolhePagamento.tf_pag.getText());

JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);

JasperReport report = (JasperReport) JRLoader.loadObject(C:/Pagamentos/relatorios/autcaixa.jasper);

JasperPrint relatorio = JasperFillManager.fillReport(report, parametro, jrRS);

JasperViewer viewer = new JasperViewer(relatorio,false);

viewer.setTitle(Relatório de Pagamentos);

viewer.setVisible(true);

viewer.show();

}
catch (Exception erro)

{

JOptionPane.showMessageDialog(null, " Relatorio não localizado " + erro);

}

}
public static void main (String args[])

{

AutCaixa app = new AutCaixa();

}

}

Obrigado mais uma vez.

Criado 14 de janeiro de 2010
Ultima resposta 3 de jun. de 2011
Respostas 12
Participantes 5