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

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

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

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

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

Acrescente a lib commons-digester no build patch

que se encontra no diretorio de instalacao do iReport

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.

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

Sim. Sao varias libs que devem estar no build patch

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

segue o código.

[code]/*

  • 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);
    

    }

}[/code]

Foi necessário realmente importar todas aquelas libs

Sim, as libs são fundamentais.

Att. Jonas

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

[quote=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
[/quote]

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

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.