Java relatorios ireport

4 respostas
D

galera estou precisando de uma ajuda
com muito custo consigui criar uma classe java que chama os relatorios feito pelo ireport mas só funciona se vc colocar todo o caminho do arquivo.jasper ,a minha class que chama o relatorio.jasper encontra-se no diretorio src e abaixo encontra-se o diretorio relatorio contendo o arquivo.jasper.
tem como colocar somente o diretorio que se encontara o arquivo.jasper sem precisar colocar todo este caminho C:\\Documents and Settings\\giovanni\\Meus documentos\\NetBeansProjects\\JavaApplication7\\src\\javaapplication7\\relatorio\\teste.jasper"); ?

meu codigo baixo:
import java.sql.*; 
import javax.swing.JOptionPane; 
import java.util.HashMap; 
import net.sf.jasperreports.engine.*; 
import net.sf.jasperreports.engine.util.JRLoader; 
import net.sf.jasperreports.view.*; 

public class RelatorioProdutos { 

private Connection con; 
private String relatorio = ("C:\Documents and Settings\giovanni\Meus documentos\NetBeansProjects\JavaApplication7\src\javaapplication7\relatorio\teste.jasper");

public RelatorioProdutos() { 
try{ 
String url ="jdbc:mysql://localhost:3306/teste";
String usuario ="root";
String senha="";
 
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url,usuario,senha);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM turma");
} 
catch(Exception event)
{
JOptionPane.showMessageDialog(null,"conexão não estabelecida"+
" verificar se o banco esta ativo","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);
}

} 
public void exibirRelatorio() throws SQLException{ 
 

try { 
JasperReport jr = (JasperReport)JRLoader.loadObject(relatorio); 
HashMap map = new HashMap(); 
JasperPrint rel = JasperFillManager.fillReport(jr, map, con); 
JasperViewer.viewReport(rel, false); 
} catch (JRException erro) { 
JOptionPane.showMessageDialog(null, "Erro: " + erro.getMessage()); 
} 
} 
  public static void main(String [] agrs) throws SQLException{
     new RelatorioProdutos().exibirRelatorio();
   
    }

}

4 Respostas

Marques

Eu também já me deparei com esse problema e o que consegui foi criar uma variável com o path da minha aplicação e depois fazer:

byte[] bytes = JasperRunManager.runReportToPdf(realPath + "/reports/Balancete.jasper", parametros, ds);

Vamos aguardar outras soluções dos colegas

Espero ter ajudado,

José Marques

rdantas

no meu projeto os .jasper ficam no mesmo diretorio que o arquivo .jar da minha aplicação. No fonte, eu coloquei apenas o nome do arquivo .jasper.

Ex:

byte[] bytes = JasperRunManager.runReportToPdf("Balancete.jasper", parametros, ds);

Vc pode tentar colocar a pasta “relatorio” dentro do src, e chamar assim

byte[] bytes = JasperRunManager.runReportToPdf("relatorio\teste.jasper", parametros, ds);

Acredito que vá funcionar,

Rodrigo.

RenataFA

No meu projeto os .jasper estão empacotados dentro do .jar. Além disso, estão em outra package, totalmente diferente, então faço assim a chamada:

JasperReport jr = (JasperReport)JRLoader.loadObject(getClass().getResource("/primeirapack/jasper/relatorio/RelatorioFinalizador.jasper"));
			
JasperPrint impressao = JasperFillManager.fillReport(jr,meusParametros,minhaConexao);

Onde primeirapack é a primeira package do meu projeto. O .jasper está no caminho mostrado acima, e o fonte que está executando este trecho de código colocado acima está no caminho:

/primeirapack/jasper/threads/MeuFonte.java

Antigamente eu fazia de outra forma, quando eu não empacotava os .jasper. Não lembro certinho o caminho, mas lembro que eu não precisava passar o caminho todo como vc está fazendo. Apenas o caminho A PARTIR da primeira pasta do meu projeto.

Espero ter dado algumas idéias! :lol:

D

obrigado RenataFA deu tudo certo

Criado 22 de janeiro de 2008
Ultima resposta 23 de jan. de 2008
Respostas 4
Participantes 4