Olá caceres.
Para poder resolver este problema coloquei os arquivos .jasper dentro de pacotes dentro da minha aplicação e para chamar o relatorio de dentro do jar, realizei da seguinte maneira.
Espero que seja isto que necessita e Espero que ajude.
Até mais.
Chamada do Relatorio (Camada Visualização - Botão)
JDialog viewer = new JDialog(new javax.swing.JFrame(), "Visualização do Relatório", true);
viewer.setSize(CapturaTamanhoTela.getWidthMonitor(), CapturaTamanhoTela.getHeightMonitor());
viewer.setLocationRelativeTo(null);
JasperViewer jrViewer = new JasperViewer(facilCobrancaCTRFacade.relatorioAdministradores(), false); // chamando o metodo da classe abaixo
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
Metodo para chamar o relatorio passando os parametros
public JasperPrint relatorioAdministradores() throws FileNotFoundException {
try {
InputStream caminhoRelatorio = this.getClass().getClassLoader().getResourceAsStream("facilcobranca/presentation/relatorio/Administradores.jasper");// caminho do arquivo dentro dos pacotes
FileInputStream caminhoProperties = new FileInputStream("DadosEmpresa.properties");
Properties properties = ManipularArquivoProperties.lerProperties(caminhoProperties); // necessario para os parametros
Map parameters = new HashMap();
parameters.put("NOMEEMPRESA", properties.getProperty("nome"));
return VisualizarRelatorio.chamaRelatorio(caminhoRelatorio, parameters); // Classe util, visualiza relatorio
} catch (Exception ex) {
JConfirmMessage.showMessageDialog(ex.getCause().getMessage(), "Atenção!!!");
return null;
}
}
Class VisualizarRelatorio
public class VisualizarRelatorio {
public static JasperPrint chamaRelatorio(InputStream caminho, Map parameters) {
try {
Connection con = ConexaoPostgres.getInstance().getConnection(); //Classe e metodo para recuperar uma conexão
JasperPrint jasperPrint = JasperFillManager.fillReport(caminho, parameters, con);
return jasperPrint;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
Class util para leitura de parametros de um arquivo properties.
public class ManipularArquivoProperties {
public static Properties lerProperties(InputStream caminhoProperties) {
try {
Properties properties = new Properties();
properties.load(caminhoProperties);
caminhoProperties.close();
return properties;
} catch (Exception ex) {
JConfirmMessage.showMessageDialog(ex.getCause().getMessage(), "Atenção!!!");
return null;
}
}
public static void gravarProperties(String caminhoProperties, Properties properties, String header) {
try {
FileOutputStream fis = new FileOutputStream(new File(caminhoProperties));
properties.store(fis, header);
fis.close();
} catch (IOException ex) {
JConfirmMessage.showMessageDialog(ex.getCause().getMessage(), "Atenção!!!");
}
}
}
Class para captura tamanho da tela para ajustes da visualização do relatorio
public class CapturaTamanhoTela {
public static int getWidthMonitor() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
int x = screenSize.width;
return x - 100;
}
public static int getHeightMonitor() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
int y = screenSize.height;
return y - 100;
}
}