Relatório só roda dentro do NetBeans

20 respostas
P
Olá pessoal!

Criei um relatório com iReport e esta devidamente funcionando dentro do NetBenas, ou seja, ta executando. Mas, quando gero o “executável” (o jar que executo de qualquer máquina) ele não gera o relatório, clico no menu e não tem nenhuma reação. Para gerar o executável uso os seguintes passos postados por “Thiago Preco Schwartz” em <a href="http://preclog.blogspot.com/2010/03/criando-jar-no-netbeans-sem-pasta-lib.html" data-bbcode="true">http://preclog.blogspot.com/2010/03/criando-jar-no-netbeans-sem-pasta-lib.html</a>

1) Mude para a visão de visualização de arquivos;

2) Localize (e abra <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/w.pngink.png?v=9" title=":wink:" class="emoji" alt=":wink:"> o arquivo build.xml;

3) Insira o seguinte trecho de código no final do arquivo, antes da tag
01.<target name="package-for-store" depends="jar">  
02.        <property name="store.jar.name" value="NOME_DO_SEU_PROJETO"/>  03.  
04.  
05.        <!-- don't edit below this line -->  
06.  
07.        <property name="store.dir" value="store"/>  
08.        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>  
09.  
10.        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>  
11.  
12.        <delete dir="${store.dir}"/>  
13.        <mkdir dir="${store.dir}"/>  
14.  
15.        <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">  
16.            <zipgroupfileset dir="dist" includes="*.jar"/>  
17.            <zipgroupfileset dir="dist/lib" includes="*.jar"/>  
18.  
19.            <manifest>  
20.                <attribute name="Main-Class" value="${main.class}"/>  
21.            </manifest>  
22.        </jar>  
23.  
24.        <zip destfile="${store.jar}">  
25.            <zipfileset src="${store.dir}/temp_final.jar"  
26.            excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>  
27.        </zip>  
28.  
29.        <delete file="${store.dir}/temp_final.jar"/>  
30.  
31.    </target>
4) Troque, na segunda linha, a string NOME_DO_SEU_PROJETO para o nome do seu projeto (que está na segunda linha do build.xml; Salve o arquivo;

5) Selecione a opção Clean and rebuild (Limpar e construir). Certifique-se que o Netbeans criou a pasta dist, contendo o jar da sua aplicação e a pasta lib;

6) Clique com o botão direito sobre o arquivo build.xml, selecione a opção Run target (executar destino), Other targets (Outros destinos) e a seguir package-for-store.



Alguém tem alguma dica, ou pode me ajudar?

Agradeço!

20 Respostas

H

Qual o erro? Algum erro deve aparecer, provavelmente no seu console.

Att.

P

Não aparece!
Pq qdo rodo dentro do netbeans ele roda sem problemas gerando o relatório em pdf.
Aparece apenas um aviso:

23/03/2011 12:27:52 net.sf.jasperreports.engine.component.ComponentsEnvironment findComponentBundles AVISO: Found two components for namespace http://jasperreports.sourceforge.net/jasperreports/components CONSTRUÍDO COM SUCESSO (tempo total: 6 segundos)
Mas Acredito que não seja esse o problema.
O problema é quando eu rodo a partir do executável. Não gera o relatório em pdf como acontece dentro no netbeans.

P

Tentei mudar o arquivo Geral.jrxml de pasta ou seja, coloquei na raiz do projeto, coloquei na pasta dist, alterei o caminho dentro da aplicação antes de gerar o executável, mas continua não executando o relatório fora do netbeans ou seja no executável.

T

Quando vc roda fora do netbeans e não abre o relatorio concerteza gera um erro…

Talvez vc nao esteja mostrando ele, faça o seguinte execute o teu .jar através do DOS

java -jar SEUJAR.jar

então vai ter seu stackTrace.

P
Ah sim! não esta encontrando o arquivo "Geral jrxml".
C:\Users\203070\Desktop>java -jar administracao.jar
A conexao foi um sucesso!
relatoriosAdministracao.FormRelGeral jButtonImprimirRelGeral ActionPerformed GRAVE: null
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: Geral.jrxml (O sistema nao pode encontrar o arquivo especificado)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:174
)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:154
)
        at relatoriosAdministracao.RelPessoas.gerar(RelPessoas.java:32)
        at relatoriosAdministracao.FormRelGeral.jButtonImprimirRelGeralActionPer
formed(FormRelGeral.java:127)
        at relatoriosAdministracao.FormRelGeral.access$000(FormRelGeral.java:12)

        at relatoriosAdministracao.FormRelGeral$1.actionPerformed(FormRelGeral.j
ava:102)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$000(Unknown Source)
        at java.awt.EventQueue$1.run(Unknown Source)
        at java.awt.EventQueue$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown
Source)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown
Source)
        at java.awt.EventQueue$2.run(Unknown Source)
        at java.awt.EventQueue$2.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown
Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: Geral.jrxml (O sistema nÒo pode encont
rar o arquivo especificado)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(Unknown Source)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:169
)
        ... 41 more

C:\Users\203070\Desktop>
Porém ele esta na raiz do meu projeto, e pelo NetBeans ele ta encontrando.
T

O problema é o local do seu relatorio.

O jar nao esta encontrando, analise isso com cuidado.
Tem varios topicos sobre isso aqui no forum,
concerteza vai achar o erro que cometeu :wink:

P
qual seria o correto:
new RelPessoas().gerar("src/relatoriosAdministracao/Geral.jrxml");
ou
new RelPessoas().gerar("src/relatoriosAdministracao/Geral.jasper");
ja virei todos esses post que falam a respeito, porém, no meu continua não gerando o relatório qdo executo a partir do jar.
T

Na real as duas formas estao erradas

T
getClass().getResourceAsStream("/pacote/"+caminho);
P

Procurei algum tópico, tutorial, etc., que ensine a trabalhar dessa forma e não encontrei até o mom., tens alguma dica por favor!
obg. abç.

T

Primeiro resultado de pesquisa do Forum.

http://www.guj.com.br/java/199390-ireport—problema-com-caminho-do-jasperfile-resolvido/2

P

Obrigado! Me desculpa pela negligência!

Estou tendo um outro problema nessa linha:

relatorio = JasperFillManager.fillReport(jasperReport, parametros, new RelPessoas());

o erro esta no método fillReport porém, não consegui sacar e aparece a seguinte msg:

cannot find symbol symbol: method fillReport(net.sf.jasperreports.engine.JasperReport,java.util.Map,relatoriosAdministracao.RelPessoas) location: class net.sf.jasperreports.engine.JasperFillManager

T

Talvez seja os jars que não estejam no seu projeto.

Tente adicionar os jars do iReport ao LibraryPatch

P

imagino que ja estão adicionados, são esses que estão circundados, ou existe mais algum necessário?


R

executa seu .jar pelo prompt de comando

não se esqueça de ir ate a pasta aonde ele está

varios erros toscos encontrei fazendo isso

T

pelo que vi falta o iText

P

não esta ai iText-2.1.7.jar após o último commons…

P

pelo prompt ele não ta enxergando os pacotes, aparecem erros como esse abaixo, apesar de estar configurado no PATH.

C:\Users\203070>javac C:\Users\203070\Documents\NetBeansProjects\Administracao\s rc\mainAdministracao\administracao.java C:\Users\203070\Documents\NetBeansProjects\Administracao\src\mainAdministracao\a dministracao.java:3: package bdAdministracao does not exist import bdAdministracao.*; ^
Se eu acessar a pasta onde esta o Main antes de executar aparece o mesmo erro.

P

adicionei todos os jars “jasperrpeorts…” e todos os “commons…” que encontrei na pasta ireport além do IText-2.1.7 que ja estava e nada alterou, por acaso tem mais algum jar que seja necessário?

P
Resolvi da seguinte forma:
private void jButtonImprimirRelGeralActionPerformed(java.awt.event.ActionEvent evt) {                                                        
        try {
            visualizarRelatorio();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(FormRelGeral.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(FormRelGeral.class.getName()).log(Level.SEVERE, null, ex);
        } catch (JRException ex) {
            Logger.getLogger(FormRelGeral.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                                                       

    public void visualizarRelatorio() throws ClassNotFoundException, SQLException, JRException {
        JasperPrint relatorio = null;
        JasperReport jasperReport = null;

        Class.forName(driver);
        Connection con = (Connection) DriverManager.getConnection(url, login, pwd);
        Statement stm = (Statement) con.createStatement();

        Map parametros = new HashMap();
       
            InputStream jasperFile = (InputStream) Thread.currentThread().getClass().getResourceAsStream("/relatorios/Geral.jasper");
            jasperReport = (JasperReport) JRLoader.loadObject(jasperFile);

            relatorio = JasperFillManager.fillReport(jasperReport, parametros, con);
            
            JasperViewer viewer = new JasperViewer(relatorio, false);
            viewer.setTitle("Relatório");
            viewer.setVisible(true);
    }
e as bibliotecas ficaram assim, conforme imagem em anexo.
Criado 23 de março de 2011
Ultima resposta 29 de mar. de 2011
Respostas 20
Participantes 4