Problemas com JasperReport e Ireport

[size=12]Eu estou começando a usar java, e estou fazendo um sistema simples para emitir relatorios com o Ireport mas ñ sei como eu faço para q no meu sistema chame o relatorio ja criado no ireport para o sistema, ele funcionaria da seguinte maneira, é um sistema onde vc entra com os dados e poe para imprimir ñ existe conexão com banco de dados, ele teria apenas q pegar os dados preenchidos no textfield e jogar para os respectivos campos no relatorioa, colocando os dados nesse textfield ele aperta o botão imprimir ai ele imprimiria o relatorio com os dados, era isso q eu queria q o sistema fizesse mas eu ñ sei como fazer alguem poderie me dar uma ajuda nisso por favor…[/size]

Bom, se você vai digitar informações em um JTextField, provavelmente não haverá a banda “Detail” no seu relatório, certo?
Neste caso você pode criar parâmetros no seu relatório e passá-los lá na sua aplicação.
Na sua aplicação ficaria algo do tipo:

[code]// Valores dos parâmetros
HashMap params = new HashMap();
params.put(“valor1”, 10);
params.put(“valor2”, 20);
params.put(“rotulo”, “testando”);

// Carrega o relatório
JasperReport report = (JasperReport) JRLoader.loadObject(getClass().getClassLoader().getResource(“relatorio.jasper”));

// Passa os parâmetros ao relatório
JasperPrint impressao = JasperFillManager.fillReport(report, params);

// Exibe o relatório na tela
JRViewer viewer = new JRViewer(impressao);
viewer.setVisible(true);[/code]
Sacou?

Agora se você vai ter um relatório com várias linhas de valores, que utilize a banda “Detail”, você deve criar um JRDataSource.

Abraços,

Marcos Antonio Campos Jordão’’

O q eu quero é poder inserir esses dados no sistema no campo correspondente q é o JtextField e imprimir no relatório, so isso sem banco de dados sem nda é coloca os dados no sistema imprimo no relatorio como é q eu posso fazer isso?

Do jeito que eu falei.
Criando parâmetros no seu Report e passando do sistema para ele na hora da impressão via HashMap.

Então é so eu pegar tipo tem uma variavel nome no IReporte é $F{nome_pac} e no NetBeans esta como JtextField1, eu faria params.put(“JtextField1”, “nome_pac”); ficaria assim?

Com “Variáveis” não dá certo.
Você terá que criar “Parâmetros”.

Para adicionar ao Map seria assim:

Desde que “nome_pac” seja um parâmetro e não uma variável.

Então cara la no Ireporte onde eu criei a variavel $F{nome_pac} eu tenho que criar ela como $P{nome_pac} seria issou ou ñ? como faria para criar um paramentro

Não.
No iReport tem as áreas:

  • Parâmetros
  • Campos
  • Variáveis

Ao invés de criar em Variáveis, crie em Parâmetros.
Pode ser via menu: Visualizar > Parâmetros do Relatório > Novo
Ou pela lateral “Estrutura do Documento”.
Veja a imagem anexa.


Como é q eu vou criar o JRDataSource com 6 parametros

Ai raciOnal da uma olhada no código q eu criei so q da erro ve se tem alguma coisa de errada?

[code] public void Prontuario() {
//Inicializando as Variaveis
JasperPrint impressao = null;

    // Parametros do relatorios
    HashMap params = new HashMap();
    params.put("nome_pac", nome_paciente.getText());
    params.put("cor_pac",cor_paciente.getItemListeners());
    params.put("idade_pac", idade_paciente.getText());
    params.put("sexo_pac",sexo_paciente.getItemAt(0));
    params.put("estvciv_pac",estcivil_paciente.getItemAt(0));
    params.put("religiao_pac",religiao_paciente.getText());
    params.put("localtrabalho_pac",localtrabalho_paciente.getText());
    params.put("profissao_pac",profissao_paciente.getText());
    params.put("convenio_pac",convenio_paciente.getText());
    params.put("endereco_pac",endereco_paciente.getText());
            
    // Referenciando o .jasper
    String relatorio = "Prontuario.jasper";
    
    try {
       impressao = JasperFillManager.fillReport(relatorio, params);
    } catch (JRException ex) {
        ex.printStackTrace();
    }
    
    // Exibe o relatório na tela
    JRViewer viewer = new JRViewer(impressao);
    viewer.setVisible(true);
}[/code]

Você não informou qual o erro que está dando!

A princípio notei que está passando o relatório (variável “relatorio”) como String, tente passa-lo como JasperReport, obtendo pelo JRLoader, de preferência pegando o caminho no classpath através do getResource(). Assim:

Falow

Kara o erro é esse

at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:420) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:256) at prontuarioimpresso.Prontuario.Prontuario(Prontuario.java:58)

Kara e vc havia dito pegando o caminho no classpath como assim… como faz isso?
e vc tb flw para eu usar o JRDataSource eu tenho mais parametros para passar ainda para o relatorio são 18 parametros, como eu vou usa JRDataSource seguindo esses ai q eu ja passei?

Agora da esse erro

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:139)

esse codigo é implementado dentro da classe onde eu criei o formulario Java ou eu tenho q criar um outra classe para ele

O JRDataSource eu tinha dito para você usar no caso de querer fazer um relatório com vários registros.
Também serve para fazer de um registro só, como é o seu caso, mas passando por parâmetro também vai dar certo.

Eu acho que o seu problema agora está em carregar o arquivo do .jasper

Onde você colocou o seu arquivo compilado?

Se ele estiver junto do seu projeto, por exemplo na raiz dele, a melhor maneira é deste jeito:

Agora se ele estiver dentro de algum package interno, você deve informar também, assim:

Se ele estiver em algum lugar do seu computador você pode passá-lo como File, assim:

[code]// Linux
File arquivo = new File("/home/marcos/relatorios/relatorio.jasper");
JasperReport relatorio = (JasperReport) JRLoader.loadObject(arquivo);

// Windows
File arquivo = new File(“c:\relatorios\relatorio.jasper”);
JasperReport relatorio = (JasperReport) JRLoader.loadObject(arquivo);[/code]

Mais uma dica, dá uma boa olhada na documentação, eu também precisei do JasperReport não faz muito tempo e aprendi tudo com a documentação.

Falow

gardussi, esse “Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException”

ocorre devido ao caminho informado estar retornando null, faça como o raci0nal falou

pra mim é a melhor maneira… cria um package e joga os .jasper nele e informe atraves do classpath

não tem erro… fica 100%

Exemplo de como eu uso :

  • Sistema
    ---- dao
    ---- view
    ---- recursos
    ---- etc

dai você lê os recursos do pacote:

URL relatorio = getClass().getClassLoader().getResource("recursos/nome-do-relatorio.jasper");

Map parameters = new HashMap();
//parameters.put("nome do parametro", valor ); Caso queira passar algum parametro ao relatório
            

JasperPrint preencher_este_relatorio = JasperFillManager.fillReport(  relatorio.openStream()  , parameters , jrRS);
JasperViewer.setDefaultLookAndFeelDecorated(true);
JasperViewer.viewReport( preencher_este_relatorio , false );

Kara continua dando erro eu ja coloquei o arquivo .jasper o .jrxml e nda

Agora eu consegui deu certo vlw ai pela ajuda kara

Esse é o codigo do programa no meu ele funcionou certinho vlw

[code]public void GeraRelatorio() {
JasperReport caminho = null;

    try {
        caminho = (JasperReport) JRLoader.loadObject(getClass().getClassLoader().getResource("Prontuario.jasper"));
    } catch (JRException ex) {
         System.out.println(ex.getMessage()); 
        ex.printStackTrace();
    }
    
    
    // Parametros do relatorios   
    Map parametros = new HashMap(); 
    parametros.put("nome_pac", nome_paciente.getText());
    parametros.put("cor_pac",cor_paciente.getText());
    parametros.put("idade_pac", idade_paciente.getText());
    parametros.put("sexo_pac",sexo_paciente.getText());
    parametros.put("estvciv_pac",estadocivil_paciente.getText());
    parametros.put("religiao_pac",religiao_paciente.getText());
    parametros.put("localtrabalho_pac",localtrabalho_paciente.getText());
    parametros.put("profissao_pac",profissao_paciente.getText());
    parametros.put("convenio_pac",convenio_paciente.getText());
    parametros.put("endereco_pac",endereco_paciente.getText());
    
    JasperPrint impressao = new JasperPrint();  
    
    try {   
       impressao = JasperFillManager.fillReport(caminho ,parametros);   
           
        JasperViewer viewer = new JasperViewer(impressao, true);   
        viewer.setVisible(true);   
        
        //Nome e diretorio onde vai ser gerado o PDF   
        String destFileName  = "C:\\Prontuario\\relatorio\\geraPDF.pdf";   
        JasperExportManager.exportReportToPdfFile(impressao,destFileName);   
       // JasperExportManager.exportReportToHtmlFile(impressao,destFileNameHTML);       
    } catch (JRException e) {   
        System.out.println(e.getMessage());   
    }   

}   [/code]

oi ai esta meu codigo

[code]import java.io.*;           
        import java.util.HashMap;    
        import java.util.ArrayList;      
        import java.util.List;      
        import java.util.Map;      
        //import javax.swing.JOptionPane;     
      
      
                     
      public class Dados{               
                   
              
          //"args" é um array de String onde cada elemento é um argumento passado pela linha de comando momento na "inicialização" da execução.    
          public static void main(String[] args){               
                  
                  
             Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();         
           try {               
             //leitura do ficheiro, prepara-o para ser aberto    
             BufferedReader in = new BufferedReader(new FileReader("conteudo.txt"));               
             String str;           
             int i = 0;           
             //vai percorrer todo o ficheiro    
             while((str = in.readLine()) != null)               
             {                     
                 if(str.startsWith("#"))    
                 {                     
                     str= "";                     
                 }                     
                 else{     //esta a dividir a frase em varias strings imprimindo o seu resultado    
                      List<String> values = new ArrayList<String>();         
                          String words[] = str.split(";");             
                          for(String word : words) {             
                              values.add(word);     
                              System.out.println(word);    
                          }         
                          mapLines.put(i, values);         
                          i++;         
                 }       
           }// fim do while                               
             in.close();               
         }  catch (IOException e){               
             // possiveis erros são tratatos aqui     
             //JOptionPane.showMessageDialog(null, this.word, "NÂO FOI POSSÍVEL ABRIR O SEU FICHEIRO", JOptionPane.ERROR_MESSAGE);      
             System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");            
         }          
         // Apresenta o contéudo do Map         
         Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();         
         for(Integer key : m.keySet()) {         
             for(String word : m.get(key)) {         
                 System.out.println(word);         
             }         
         }                  
         }     
          public static void main2(String[] args){               
                  
                  
              Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();         
           try {               
                        
             BufferedReader in2 = new BufferedReader(new FileReader("conteudo2.txt"));               
             String str;           
             int i = 0;           
             while((str = in2.readLine()) != null)               
             {                     
                 if(str.startsWith("#"))                     
                 {                     
                     str= "";                     
                 }                     
                 else{     //esta a dividir a frase em varias strings    
                          List<String> values = new ArrayList<String>();         
                          String words[] = str.split(" ");             
                          for(String word : words) {             
                              values.add(word);    
                              System.out.println(word);    
                          }         
                          mapLines.put(i, values);         
                          i++;         
                 }       
           }// fim do while                               
             in2.close();               
         }  catch (IOException e){               
             // possiveis erros são tratatos aqui      
             System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");    
         }          
         // Apresenta o contéudo do Map         
         Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();         
         for(Integer key : m.keySet()) {         
             for(String word : m.get(key)) {         
                 System.out.println(word);         
             
              }       
      
          }    
      }    
  }   [/code] 

e tenho por exemplo este ficheiro

961234567 253883377 24:05:2011 10:30:10 068 16 13 963456789 253883355 28:05:2011 12:15:17 088 12 09 963456789 253883377 29:05:2011 17:00:00 120 14 11 969876666 253883377 30:05:2011 10:05:34 070 11 09 961234567 253883377 31:05:2011 22:30:05 066 14 11 961234567 253883377 02:06:2011 14:19:41 076 15 13 963456789 253883377 05:06:2011 11:33:34 085 07 06

e queria que fosse pedido ao utilizador que dados e que ele quer imprimir. por exemplo…pedirmos para imprimir todos os dados com o numero 961234567

abraços