Aonde está o erro desse relatorio?!?!?!

Tenho um sistema que era para gerar um sistema simples de relatorio atraves do Jasper, mas está apresentando erro no relatorio, a seguir tem o conteudo do botão e do erro apresentado:

Conteudo do botão:

[code] try {
Class.forName(“com.mysql.jdbc.Driver”);
String banco = “jdbc:mysql://localhost:3306/otica”;
Connection conn = DriverManager.getConnection(banco, “root”, “will@958”);

    } catch (Exception ex) {
        ex.printStackTrace();
    }

    HashMap mapa = new HashMap();
    JasperPrint relatorio = null;
    try {


        relatorio = JasperFillManager.fillReport("Armação.jasper", mapa,conn);
        JasperViewer.viewReport(relatorio, false);
    } catch (Exception ex) {
        ex.printStackTrace();
    }[/code]

e o erro que o sistema apresenta é esse:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: Armação.jasper at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:79) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:232) at Produtos.Armacao.JB_RelatorioActionPerformed(Armacao.java:551) at Produtos.Armacao.access$400(Armacao.java:43) at Produtos.Armacao$5.actionPerformed(Armacao.java:329) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5806) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) Caused by: java.io.FileNotFoundException: Armação.jasper ... 30 more

O sistema não está encontrando o relatório
Coloque o seu relatório em um pacote
Crie uma classe sem nada dentro desse pacote

Ex.:

public class Relatorio
{
}

E acesse o relatório dessa forma

relatorio = JasperFillManager.fillReport(Relatorio.class.getResourceAsStream(“Armação.jasper”, mapa,conn);

Dessa forma ele busca o relatório no mesmo pacote da classe.

Dica.: Procure não criar os nomes dos relatórios com acentos.

Cara troquei o nome e criei uma classe vazia como vc falou, os relatorios já estão em um pacote separado mas está dando erro a sentença que vc passou:

relatorio = JasperFillManager.fillReport(Relatorio.class.getResourceAsStream("Armacao.jasper", mapa,conn)); 

o erro é esse:

method getResourceAsStream in class java.lang.Class cannot be applied to given types
required: java.lang.String
found: java.lang.String, java.util.HashMap, java.sql.Connection

a unica string que tem ai é a conn que já está declarada:

Connection conn;

Não está funcionando pq a chamada está errada.

Faça assim:

JasperFillManager.fillReport(Relatorio.class.getResourceAsStream("Armação.jasper"), mapa,conn); 

O thiago errou na hora de colocar o parêntes no lugar certo :wink:

[]´s

Caras perfeito funcionou a chamada, mas estou com um outro erro agora que é esse:

15/01/2010 16:36:58 net.sf.jasperreports.engine.query.JRJdbcQueryExecuter
WARNING: The supplied java.sql.Connection object is null.

E fala que não há paginas no relatorio, sendo que existe dados na tabela em questão!!!

Faltou uma chave depois do “Armacao.jasper” foi mals kkkk

Esse erro ocorreu porque o objeto Connection está nulo
Posta a classe inteira para a gente dar uma olhada

Will, leia a excessão: The supplied java.sql.Connection object is null
A conexão que você está passando não está sendo criada.
Confira se os dados parâmetros passados para a criação da conexão estão corretos.

[]´s

Caras muito obrigado pela ajuda que vcs estão dando !!! Consegui resolver o problema d aconecção com o banco de dados nesse caso o Mysql, só que apareceu outro, o relatorio não está gerando os dados, ele monta o relatorio só que nw preenche nada, não dá erro, ele está conectando ao banco, criei uma classe só para cuidar da conecção mas não está preenchendo o relatorio!! o que pode ser, preciso fazer um select ante? segue a baixo o conteudo do botão:

[code]
Connection conn = new conecao().conectar();
if (conn != null) {

        HashMap mapa = new HashMap();
        JasperPrint relatorio = null;
        try {

            //relatorio = JasperFillManager.fillReport("Armacao.jasper", mapa, conn);
           relatorio = JasperFillManager.fillReport(Relatorio.class.getResourceAsStream("Arma.jasper"), mapa, conn);

            JasperViewer.viewReport(relatorio, false);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    } else {
        JOptionPane.showMessageDialog(null, "Não foi possivel conctar ao banco!!! Tente novamente!!!", "ERRO", JOptionPane.ERROR_MESSAGE);
    }[/code]

Galera realmente não sei o pq nw está sendo preenchido o relatorio já refiz a conecção do plugin do netbeans a classe o botão, e só está sendo preenchindo o cabeçario do relatorio nada mais, preciso desse relatorio e nada de conseguir alguma sugestão??!?!?

Classe responsável pela conecção:

[code]public class conecao {

public Connection conectar(){

// base de dados é “test”
String url = “jdbc:mysql://localhost:3306/otica”;
String usuario = “root”;
String senha = “will@958”;
try{
Class.forName(“com.mysql.jdbc.Driver”).newInstance();
Connection conn = DriverManager.getConnection(url, usuario,senha);
return conn;
}
catch(SQLException ex){
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
return null;
}
catch(Exception e){
System.out.println("Problemas ao tentar conectar com o bancode dados: " + e);
return null;
}
}
}[/code]

E no botão está assim:

 [code]   try {
       Connection conn = new conecao().conectar();
         ResultSet rs = null;
   

    HashMap mapa = new HashMap();
    JasperPrint relatorio = null;



        relatorio = JasperFillManager.fillReport("Novas.jasper", mapa, conn);
        JasperViewer.viewReport(relatorio, false);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
   [/code]

Já fiz como o davidbuzatto me falaram tb para jogar o arquivo jasper na raiz do projeto e os dois acontece a mesma coisa só preenche o cabeçario!

[code]Galera realmente não sei o pq nw está sendo preenchido o relatorio já refiz a conecção do plugin do netbeans a classe o botão, e só está sendo preenchindo o cabeçario do relatorio nada mais, preciso desse relatorio e nada de conseguir alguma sugestão??!?!?

Classe responsável pela conecção:

[code]public class conecao {

public Connection conectar(){

// base de dados é “test”
String url = “jdbc:mysql://localhost:3306/otica”;
String usuario = “root”;
String senha = “will@958”;
try{
Class.forName(“com.mysql.jdbc.Driver”).newInstance();
Connection conn = DriverManager.getConnection(url, usuario,senha);
return conn;
}
catch(SQLException ex){
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
return null;
}
catch(Exception e){
System.out.println("Problemas ao tentar conectar com o bancode dados: " + e);
return null;
}
}
}[/code]

E no botão está assim:

 [code]   try {
       Connection conn = new conecao().conectar();
         ResultSet rs = null;
   

    HashMap mapa = new HashMap();
    JasperPrint relatorio = null;



        relatorio = JasperFillManager.fillReport("Novas.jasper", mapa, conn);
        JasperViewer.viewReport(relatorio, false);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
   [/code]

Já fiz como o davidbuzatto me falaram tb para jogar o arquivo jasper na raiz do projeto e os dois acontece a mesma coisa só preenche o cabeçario!

Amigo, de uma olhada em sua conexao com o banco,

Onde está o seu result set com as informações que vão ser enviadas para o relatório???

PS.: Relatório sem informação = nao recebeu informação :wink:

Att. Jonas

Esta enviando:

relatorio = JasperFillManager.fillReport("Novas.jasper", mapa, conn);  

conn = null ?!

e o result set com a consulta do banco?

Amigo refiz o botão mas ainda nw consegui resolver, poderia me ajudar? É a primeira vez que mexo com o ireport e to apanhando demais! O botão ficou assim agora:

[code] CallableStatement CS = null;
Connection conn = new conecao().conectar();

    if (conn != null) {
        try {
            HashMap mapa = new HashMap();
            JasperPrint relatorio = null;
            relatorio = JasperFillManager.fillReport("Novas.jasper", mapa, conn);
            JasperViewer.viewReport(relatorio, false);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    } else {
        JOptionPane.showMessageDialog(null, "Não foi possivel conctar ao banco!!! Tente novamente!!!", "ERRO", JOptionPane.ERROR_MESSAGE);
    }[/code]

vc nao entendeu…

onde esta o result set?

o “select * from table” da vida?

Att. Jonas

Então pq em outros topicos tinham dito que com o plugin do netbeans nw era necessario fazer o select que ele faria isso sozinho!

então tá…

se o seu netbeans consegue adivinhar onde os dados estão…
parabens :wink: pois ainda desconheço isso…

Salvo, se vc está usando a conexao de banco diretamente no relatório

att. Jonas

Então cara como falei to perdidão é a primeira vez que mexo com relatorios! Nw faço nem ideia de como recriar essa classe para poder fazer a conecção direta com o banco ou de como preencher esse relatorio!

Faça a consulta com o result set … e ao invés de mandar um simples conn que nao tem nada dentro…

vc vai enviar o result set com as informações já consultadas…

ps.: … os famosos select da vida, rs.next();
o basicao de consulta a banco de dados.

att. Jonas

Seguindo o conselho do TheKill pesquisei mais um pouco na net e achei alguns exemplos que tentei aplicar ao meu relatorio mas sem conseguir o resultado esperado o botão está da seguiinte maneira:

[code] try {
CallableStatement CS = null;
Connection conn = new conecao().conectar();

        if (conn != null) {
            JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso!");
        } else {
            JOptionPane.showMessageDialog(null, "Conexão não efetuada com sucesso!");
        }

        Statement stm = conn.createStatement();
        String query = "select * from arma";
        ResultSet rs = stm.executeQuery(query);
        JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);

        HashMap mapa = new HashMap();
        JasperPrint relatorio = null;
        relatorio = JasperFillManager.fillReport("report1.jasper", mapa, conn);
        JasperViewer.viewReport(relatorio, true);

    } catch (Exception ex) {
        ex.printStackTrace();
    }[/code]

E continua a não preencher o relatorio! Nw sei mais o que fazer para esse relatorio funcionar!

olha bem oque esta fazendo:

ResultSet rs = stm.executeQuery(query);  
 JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);  
relatorio = JasperFillManager.fillReport("report1.jasper", mapa, conn);  

Vejamos… por que esta enviando conn para o relatório? conn esta vazio. envie rs

att. Jonas