Erro no Jaspersoft - net.sf.jasperreports.engine.JRException: Invalid page index range: 0 - -1 of 0

Pessoal, esta acontecendo esse erro somente quando eu chamo o relatorio na aplicação, ao testar o relatorio no jasper funciona perfeitamente, verifiquei o nome do arquivo e esta correto, verifiquei se existe dados no banco em questao e tambem esta ok, o parametro no relatorio e no bean estão com o mesmo nome"COD_VENDA",
não sei porque começou aparecer este erro, ja é o 4 relatorio em seguida que aparece o erro abaixo;

net.sf.jasperreports.engine.JRException: Invalid page index range: 0 - -1 of 0. at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:141) at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:242) …tecnologia.bean.DuplicataBean.imprimirDuplicataPorCodigoVenda(DuplicataBean.java:263)

Bean
    public void imprimirDuplicataPorCodigoVenda(ActionEvent evento) {
        try {
            Venda vendaSelecionada = (Venda) evento.getComponent()
                    .getAttributes().get("vendaSelecionada");
            String caminho=Faces.getRealPath("/report/relatorioDuplicataPorCodigoVenda.jasper");
            Map<String, Object> parametros = new HashMap<>();

            parametros.put("COD_VENDA", vendaSelecionada.getCodigo());
           // caminho e o codigo estao sendo preenchido, conferidos.

            Connection conexao = HibernateUtil.getConexao();

            JasperPrint relatorio = JasperFillManager.fillReport(caminho,
                    parametros, conexao);
            JasperPrintManager.printReport(relatorio, true);
        } catch (JRException erro) {
            Messages.addGlobalError("Ocorreu um erro ao tentar gerar o relatório");               }
    }

Vou da uma olhada no meu código, mais acho que o caminho do relatório é com duas barra //

@jallisson_jallis, tentei aqui infelizmente não tambem nao deu certo.

Criei um relatorio em branco so com COD_VENDA e continua a mesma msg.

net.sf.jasperreports.engine.JRException: Invalid page index range: 0 - -1 of 0.
    at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:141)
    at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:242)
    at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:129)
    at net.sf.jasperreports.engine.JasperPrintManager.printReport(JasperPrintManager.java:326)
    at br.com.diftecnologia.bean.DuplicataBean.imprimirDuplicataPorCodigoVenda(DuplicataBean.java:263)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIData.broadcast(UIData.java:1108)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)    at java.lang.Thread.run(Thread.java:745)

Na hora que você executa pelo Ireport abre normal!
Agora quando chama

Olha esse código abaixo da certo.

AcessoBD acessoBd = new AcessoBD();

    if (ftfIdLote.getValue() == null){
        JOptionPane.showMessageDialog(this,"Informe o ID do Lote","Erro",JOptionPane.INFORMATION_MESSAGE);
        ftfIdLote.requestFocus();
    }else {
        
         JOptionPane.showMessageDialog(this,"Aguarde Enquanto é gerado","Impressão",JOptionPane.INFORMATION_MESSAGE);
    try {
        
        HashMap parametros = new HashMap();
        parametros.put("ID_LOTE",ftfIdLote.getValue());
        parametros.put("CAMINHO_IMAGEM1", System.getProperty("user.dir") + "\\imagem\\logocidade.jpg");
        parametros.put("CAMINHO_IMAGEM2", System.getProperty("user.dir") + "\\imagem\\logoserf.jpg");
        parametros.put("CAMINHO_IMAGEM3", System.getProperty("user.dir") + "\\imagem\\logoprefeitura.jpg");
        
        
        
        JasperPrint jp = JasperFillManager.fillReport(System.getProperty("user.dir") + "\\relatorios\\DespachoLote.jasper", parametros, acessoBd.conectar());
        
        
        
        
        JasperViewer.viewReport(jp, false);
        //JasperPrintManager.printReport(jp, false); 
        //JasperPrintManager.printPage(jp,0,false); 
        this.dispose();
        Menu.menuVisivel();
        //JasperPrintManager.printReport(jp, false); 
        
    } catch (JRException ex) {
        Logger.getLogger(RelatorioDespachoLoteFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
    
 }

@jallisson_jallis , descobri que o erro está na query do Jasper, eu criei um relatorio somente com a tabela VENDA sem ITENSVENDA e outras, ai fiz a busca, funcionou normalmente o mesmo relatorio que esta descrito acima, porem ao inserir as tabelas ITEM_VENDA,UNIDADE_MEDIDA,PESSOA,PESSOA na query passou a dar o mesmo erro, estou ainda tentando fazer a query de forma diferente mas nao esta funcionando.
Tentei fazer outro relatorio que estava funcionando somente com uma tabela(PESSOA), mas após adicionar os inner join apareceu a mesma mensagem.
Como resolver isso?

`SELECT victoria.pessoa.nome,
    victoria.pessoa.cpf,
    victoria.cliente.status,
    victoria.cliente.data_cadastro,
    victoria.pessoa.data_nascimento,
    victoria.pessoa.numero_rg,
    victoria.pessoa.telefone,
    victoria.pessoa.orgao_emissor,
    victoria.pessoa.data_emissao_rg,
    victoria.pessoa.email,
    victoria.sexo.sigla,
    victoria.cliente.codigo,
    victoria.endereco.bairro,
    victoria.endereco.cep,
    victoria.endereco.complemento,
    victoria.endereco.rua,
    victoria.endereco.numero,
    victoria.cidade.nome AS nome_cidade,
    victoria.estado.sigla AS sigla_estado
FROM victoria.cliente
    INNER JOIN victoria.pessoa ON 
     victoria.cliente.pessoa = victoria.pessoa.codigo 
    INNER JOIN victoria.sexo ON 
     victoria.pessoa.sexo_codigo = victoria.sexo.codigo 
    INNER JOIN victoria.endereco ON 
     victoria.pessoa.endereco_codigo = victoria.endereco.codigo 
    INNER JOIN victoria.cidade ON 
     victoria.endereco.cidade_codigo = victoria.cidade.codigo 
    INNER JOIN victoria.estado ON 
     victoria.cidade.estado_codigo = victoria.estado.codigo 
WHERE 
     victoria.pessoa.cpf = $P{CPF}

@jallisson_jallis
Mudei e coloquei como o seu exemplo e continua o a msg.

envia a base de dados e o projeto ireport

@jallisson_jallis segue os arquivos em anexo …
relatorioClientePorCodigo.jrxml (17.8 KB)
relatorioClientePorCodigo.jasper (42.4 KB)

se precisar de mais é so avisar, to na area.

Testei aqui deu Certo

olha ai o codigo que usei

AcessoBD acessoBd = new AcessoBD();

    if (id.getValue() == null){
        JOptionPane.showMessageDialog(this,"Informe o ID do Lote","Erro",JOptionPane.INFORMATION_MESSAGE);
        id.requestFocus();
    }else {
         JOptionPane.showMessageDialog(this,"Aguarde Enquanto é gerado","Impressão",JOptionPane.INFORMATION_MESSAGE);
    try {
        HashMap parametros = new HashMap();
        parametros.put("COD_PESSOA",id.getValue());
        //parametros.put("CAMINHO_IMAGEM", System.getProperty("user.dir") + "\\imagem\\logo.jpg");
        JasperPrint jp = JasperFillManager.fillReport(System.getProperty("user.dir") + "\\relatorios\\relatorioClientePorCodigo.jasper", parametros, acessoBd.conectar());
        JasperViewer.viewReport(jp, false);
        //JasperPrintManager.printReport(jp, false);
        //JasperPrintManager.printPage(jp,0,false);
        this.dispose();
        //Menu.menuVisivel();
        //JasperPrintManager.printReport(jp, false);
    } catch (JRException ex) {
        Logger.getLogger(RelatorioAtendimentoFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
 }
1 curtida

@jallisson_jallis desde ja agradeço a atenção, com esse codigo “System.getProperty(“user.dir”)” aparece a mensagem que o arquivo .jasper teria que estar neste caminho abaixo.

Caused by: java.io.FileNotFoundException: /home/everthon\report\relatorioClientePorCodigo.jasper

olha como ficou o codigo no bean;

Connection conexao = HibernateUtil.getConexao();
JasperPrint jp = JasperFillManager.fillReport(System.getProperty(“user.dir”) + “\report\relatorioClientePorCodigo.jasper”, parametros, conexao);
JasperViewer.viewReport(jp, false);

@jallisson_jallis, Esse foi o código que resolveu, porem não entendi porque os outros relatorios funcionaram apenas com uma barra("/") tentei novamente com 2 barras (’\’) como dito anteriormente, porem inverti elas, ai sim funcionou.

public void imprimirClientePorCodigo(ActionEvent evento) {
try {
Cliente clienteSelecionado = (Cliente) evento.getComponent().getAttributes().get(“clienteSelecionado”);
System.out.println( " getPessoa().getCodigo()…:"+ clienteSelecionado.getPessoa().getCodigo());
String caminho = Faces.getRealPath("//report//relatorioClientePorCodigo.jasper");

    Map<String, Object> parametros = new HashMap<>();
    parametros.put("COD_PESSOA",clienteSelecionado.getPessoa().getCodigo());
 
    Connection conexao = HibernateUtil.getConexao();
    JasperPrint jp = JasperFillManager.fillReport(caminho, parametros, conexao);
  
    JasperViewer.viewReport(jp, false);
} catch...

testarei o outro desta forma, caso ocorra outra exception portarei aqui, grato vlw.

não conheço o método getRealPath da Classe Faces, talvez ele trabalha desse jeito com as barras invertidas diferente do string que é colocado direto System.getPropert.