Após gerar .jar não acesso o relatório

6 respostas
F

Oi, pessoal, me ajudem nessa, por favor.
Fiz um relatorio de teste no ireport, prá depois editar se der certo.
Fiz a chamada da minha aplicação, e até aqui tudo certo, funcionando direitinho no Eclipse.

Abaixo está a chamada da minha aplicação.

if(rbTel.isSelected()==true) 
{
    VetRelTel1 vt = new VetRelTel1();                             
    vt.imprimir();
}

Abaixo está a classe que gera o relatorio

package veterano;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
    
public class VetRelTel1
{
    public void imprimir(){

   Connection conn = null;

  try {
        //cria a conexao com o banco de dados
        Class.forName("org.firebirdsql.jdbc.FBDriver");
        String db = "jdbc:firebirdsql:localhost/3050:C:/DbVet/veteranos.fdb";
        conn = DriverManager.getConnection(db, "SYSDBA", "masterkey");
        System.out.println("Gerando relatórios ...");

        //Map<String, Object> Map = new HashMap();
        @SuppressWarnings("rawtypes")
        //Map param = new HashMap<String, Object>();
        HashMap<String, Object> map = new HashMap<String, Object>();
       
        //PEGA O CAMINHO FISICO ATEH O ARQUIVO .jasper
        
        String arquivo = "Relatorios/report1.jasper";
          
        @SuppressWarnings("unchecked")
        JasperPrint jp = JasperFillManager.fillReport(arquivo, map, conn);// parameterMap,
        
        //exibe o relatorio com o viewReport
        JasperViewer.viewReport(jp, false);
  
      } catch (SQLException ex) {
                                  ex.printStackTrace();
                                } catch (ClassNotFoundException ex) {
                                                               ex.printStackTrace();
                                                             } catch (JRException ex) {
                                                                                        ex.printStackTrace();
                                                                                      }
        finally {
                  try {
                        if (!conn.isClosed()) {
                                                  conn.close();
                                              }
                              System.out.println("Finalizado!");
                      } catch (Exception e) {    }
                }
}

  public static void main(String[] args) throws JRException {   
      VetRelTel1 t = new VetRelTel1();   
     // t.imprimir();
     }

}

O que ocorre é que ao gerar o jar, não vem o relatorio, quando clico no botão, estando o radio button selecionado.

No Eclipse acesso perfeitamente.
O que eu devo mudar prá conseguir acessar, depois de gerado o jar?

Minha estrutura no Eclipse está assim:

Package Explorer
… Veteranos
… - src
… - Relatorios
… -report1.jasper
… -report1.jrxml
… - lib
… - JRE System Library[JavaSE-1.8]
… - Referenced Libraries

Obrigado.
fjfeitosa

6 Respostas

A

@fjfeitosa você pode colocar aqui pra nós o erro que está aparecendo no seu log? Caso você não tenha log na aplicação, pode iniciá-la pelo console (navegando pelo console até a pasta do projeto e digitando o comando “java -jar seuJar.jar”) e nos retornar o texto de saída quando você clica no botão? Provavelmente sua aplicação está estourando exception e eu desconfio que é na hora de tentar encontrar seu arquivo jasper.

Abraços :wink:

F

Olá, adriano_si.
Não entendi bem o que voce pediu. Só prá lembrar, rodando o aplicativo no Eclipse, não dá erro, não gera mensagem. Agora, no jar que eu criei, eu seleciono uma das opções de relatório, num radio button, que no caso seria pesquisa por telefone, e clico num botão ‘OK’, e não acontece nada (somente no jar. No Eclipse vem o relatório).
Pelo que voce está me falando há alguma mensagem em background que possa ser acessada? Desculpe pela ignorância no assunto. É o primeiro aplicativo que faço pelo Eclipse. Obrigado por qualquer esclarecimento.
fjfeitosa

M

Abra esse arquivo jar com o winrar ou coisa do tipo, veja se a pasta de relatórios está lá dentro. Se não estiver, você precisa dizer que essa pasta também deve ser empacotada no jar. No eclipse, antes de exportar, você tem que clicar com o botão direito na pasta Relatórios > Build Path > Use as Source Folder dessa maneira ela irá junto com o seu código java no jar. Se após isso não achar ainda o relatório, você precisa usar outra maneira de pegar o caminho dele, ai você pode pesquisar por java getResource no google. Abraço

F

Olá, Marcus_Gp.

Em meio à espera pela orientação de alguém, me veio à lembrança algo que li no forum, (vou ver se acho novamente para dar os créditos devidos) mas não tinha entendido muito bem: que os arquivos para serem acessados precisariam estar num pacote, dentro de src. Aí criei um pacote chamado relatorio, coloquei o .jasper e o .jrxml dentro.
Como caminho dos relatórios coloquei:

InputStream arquivo = getClass().getResourceAsStream( "/relatorio/report1.jasper" );

na classe acima e gerei o .jar e o relatorio carregou. Agradeço pela sua colaboração e do adriano_si, e que essas informações possam de alguma forma auxiliar alguém que esteja com problema parecido. Valeu, pessoal!. Abraços!.

fjfeitosa.

M

Não somente dentro do pacote src, mas se esses folders são source foulders também entrarão no processo do empacotamento. Como as libs de quando você faz um projeto, você deixa elas fora do src, mas adiciona no seu classpath.

Que bom que conseguiu, abraço.

F

Valeu mesmo, Marcus_Gp. Abraços!

Criado 6 de junho de 2016
Ultima resposta 8 de jun. de 2016
Respostas 6
Participantes 3