[RESOLVIDO] Resource not found at: (Arquivo).jasper

Estou fazendo uma aplicação e me deparei com o seguinte problema enquanto tentava abrir um arquivo .jasper em um jasperViewer:

Resource not found at: arquivo.jasper

Ok, vamos lá, estou já com alguns arquivos .jasper rodando tranquilo na aplicação, eles abrem e mostram o conteúdo tudo certo, porém esse .jasper que está dando problema ele possui 5 subreports dentro dele, então copiei os subreports que compõe esse report e joguei para a mesma pasta que todos os reports estão:

image

Segue o meu código java:

private void clk_viaCli(ActionEvent event) 
{
        if(tbv_orcamento.getSelectionModel().getSelectedIndex()!=-1)
        {  
        Connection con =  Banco.con.getConnect();
        InputStream jasperFile = getClass().getResourceAsStream("/SGBD/Relatorios/RelatorioOrcamentoClienteDetalhado.jasper");
        try
        {

            Map<String,Object> map = new HashMap<>();
            map.put("orc_cod", tbv_orcamento.getSelectionModel().getSelectedItem().getCodigo());
            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperFile);            
           JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,map, con); 
           JasperViewer jasperViewer = new JasperViewer(jasperPrint,false);
           jasperViewer.setTitle("Visualizador Relatório (SGBD)");
            jasperViewer.setVisible(true);
        }
        catch(JRException e){System.out.println(e.getMessage());}
        
        }
}

Localize e mostre onde vc está chamando o “arquivo.jasper”

Se você resolveu poderia compartilhar com todos nós?

Tenho vários relatórios funcionando com sub-relatórios fazendo assim:

Pego o caminho da pasta com os relatorios que esta dentro da pasta webapp:

String reporstPath = context.getRealPath("reports");

Passo o caminho como parametro para o report principal, e no relatorio principal em subreport expression:

$P{reporstPath} + "/subrelatorio.jasper"

1 curtida

Galera consegui resolver o problema, @dlemos me jogou uma luz, porém fiz de um jeito que acredito que não seja a melhor maneira de realizar isso, segue o meu código:

private void clk_viaCli(ActionEvent event) throws IOException 
{
    File io =  new File(new File(".").getCanonicalPath()+"\\src\\SGBD\\Relatorios");
    tf_cliente.setText(io.getPath());
    if(tbv_orcamento.getSelectionModel().getSelectedIndex()!=-1)
    {  
        Connection con =  Banco.con.getConnect();
        InputStream jasperFile = getClass().getResourceAsStream("/SGBD/Relatorios/RelatorioOrcamentoClienteDetalhado.jasper");
        try
        {
            Map<String,Object> map = new HashMap<>();
            map.put("orc_cod", tbv_orcamento.getSelectionModel().getSelectedItem().getCodigo()+"");
            map.put("path",io);
            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperFile);            
           JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,map, con); 
           JasperViewer jasperViewer = new JasperViewer(jasperPrint,false);
           jasperViewer.setTitle("Visualizador PDF (SGBD)");
            jasperViewer.setVisible(true);
        }
        catch(JRException e){System.out.println(e.getMessage());}
    } 
}

e na source do jaspersoft:
<subreportExpression><![CDATA[new File ($P{path},"imageReport.jasper")]]></subreportExpression>
depois disso defino o tipo do paramatro Path para java.io.File.

agora olha a G A M B I. Ele funciona de boa rodando no Netbeans pq ele pega o arquivo (.jasper) pelo caminho onde o projeto está sem ser o .JAR, então ele funciona de boa. O problema é quando você executa o .JAR, ele não consegue acessar (ou não conseguir achar um jeito) os arquivos dentro dele, então o que eu fiz, dentro do dist criei uma pasta src/SGBD/relatorios/arquivo.jasper, legal funfou dboameuamigo, PORÉM meus arquivos .jasper agora estão “soltos” na pasta dist, o que pra mim não é uma solução nada interessante.

Problema parcialmente resolvido