[RESOLVIDO] Relatório Jasper só é exibido executando projeto pelo NetBeans

Galera, boa tarde.

Tenho dentro de um dao, o seguinte código que me gera uma folha de relatório status de cada tipo de os: Aberta, Atendendo e finalizadas.

    public void relatorioDeOs(int situacao) throws JRException {
    Connection con = ConnectionBank.getConnetion();
    PreparedStatement pstm = null;
    ResultSet rs = null;

    try 
    {
        pstm = con.prepareStatement("select\n" +
                                "    os.Cod as CodOs,\n" +
                                "    os.Problema,\n" +
                                "    os.FkTipo as CodTipo,\n" +
                                "    t.Descricao as Tipo,\n" +
                                "    os.FkSetor as CodSetor,\n" +
                                "    s.Descricao as Setor,\n" +
                                "    os.FkPrioridade as CodPrioridade,\n" +
                                "    p.Descricao as Prioridade,\n" +
                                "    os.FkSituacao as CodSituacao,\n" +
                                "    st.Descricao as SituacaoOs,\n" +
                                "os.Excluido as Excluido,\n"+
                                "    l.Cod as CodColaborador,\n" +
                                "    l.Loguin as Colaborador\n" +
                                "from \n" +
                                "	os as os\n" +
                                "join tipo as t\n" +
                                "on os.FkTipo=t.Cod\n" +
                                "join setor as s\n" +
                                "on os.FkSetor=s.Cod\n" +
                                "join prioridade as p\n" +
                                "on os.FkPrioridade=p.Cod\n" +
                                "join situacao as st\n" +
                                "on os.FkSituacao=st.Cod\n" +
                                "join loguin as l\n" +
                                "on os.FkLoguin=l.Cod\n" +
                                "where os.FkSituacao="+situacao+" and os.Excluido='N';");
        rs = pstm.executeQuery();
        
        JRResultSetDataSource relatorio =  new JRResultSetDataSource(rs);
        try 
        {
            File jasper = new File(getClass().getResource("/br/com/cesmg/relatorios/RelatorioOs.jasper").toURI());
            JasperPrint jp = JasperFillManager.fillReport(jasper.getAbsolutePath(), new HashMap(), relatorio);
            JasperViewer jv = new JasperViewer(jp, false);
            jv.setVisible(true);
        } catch (URISyntaxException  e) {
            JOptionPane.showMessageDialog(null, "Erro na manipulação do relatório, relatorioDeOs(int situacao): "+e, "Erro ao gerar relatório.", JOptionPane.ERROR_MESSAGE);
        }
    } catch(SQLException e) {
        JOptionPane.showMessageDialog(null, "Relatorio não pode ser impresso."+e, "Erro ao gerar relatório.", JOptionPane.ERROR_MESSAGE);
    }
    finally {
        ConnectionBank.closeConnection(con, pstm, rs);
    }
}

Esse relatório é exibido normalmente, se estou executando o projeto pela IDE.

Porém, se pego o meu .JAR gerado após a compilação do projeto, o sistema abre normalmente, mas não mostra o relatório.

Como fazer para que funcione executando apenas o . JAR?

Boa noite, cara, gera algum erro na hora de abrir o relatório?

Quando isso aconteceu comigo, é pq eu tinha colocado um acento no nome do meu pacote, tipo: “Relatórios”, se tiver algum acento, tenta tirar e testa de novo

Opa, realizei uma conferência nos nomes de cada pacote. E está tudo sem acento, continua da mesma forma, se eu executar o projeto pela IDE funciona normalmente. agora se limpar e construir e depois utilizar o .JAR para abrir os relatórios não funciona =\

não dá erro nenhum?

Pela IDE funciona normal, nenhum dos meus catch’s retornam erro. Executando pelo .JAR ele só não abre.

Vê se tá pegando o try mesmo, tira o arquivo da pasta e vê se dá algum erro

Removendo os arquivos o try entra em ação, agora executando pelo .JAR ele não retorna nada.

Parece que quando executa pelo .jar ele não encontra o caminho pela forma como definiu.
Executa o .jar pelo terminal ou pelo cmd e ver se dá algum erro.

Tenta chamar assim: System.getProperty("user.dir") + "caminho_relatorio".

Outra coisa, verifica as fontes que foram utilizadas no relatório. Coloca todos os textos como “Arial”, aí vc retorna

É galera, não consegui resolver ainda, tentei as opções acima e não funciona, sem retorno algum.

Tem como subir o fonte pro github?

Então cara, esse código está com algumas configurações de uma empresa não posso subir ele, por isso postei só minha classe para chamar o relatório.

Cria uma pasta no Disco Local C, põe qualquer nome na pasta, seta o caminho da pasta no NetBeans e testa pra ver se funciona. (Coloca o relatório também)

Acho que minha solução é essa, o .JAR funciona se o caminho estiver fora do projeto, acho que vou deixar funcionando dessa forma, e na hora de gerar o .exe eu crio uma pasta com os relatórios do sistema. Só queria entender por que não puxa o relatório se estiver dentro da pasta do projeto.

relatorio

Funcionou então? Uma boca dica é deixar os arquivos ocultos. Na hora de criar o setup vc mesmo pode definir isso, aí não vai precisar fazer isso de máquina em máquina.

Não sei se vc conhece, mas usa o istool pra fazer definir esses atributos pra cada arquivo

Vou fazer isso, conheço o isTool, obrigado pelo apoio.

1 curtida

Pessoal, boa tarde.

Só para deixa bem documentado, fiz a pergunta de forma privada para um colaborador do fórum e ele me sugeriu utilizar o método, InputStream. Fiz a alteração ficando dessa forma:

InputStream jasper = getClass().getResourceAsStream(“Caminho”);

Limpei e construí o projeto executei o .JAR e funcionou normalmente.

Obrigado a todos pelo auxílio.

2 curtidas