relatório que tem subrelatório não abre em outro pc

5 respostas
M

Olá pessoal! Bem, fiz uma aplicação desktop e o relatório abre normal na aplicação na máquina que foi feita, porém após gerar o jar e executar em outra máquina notei que os relatórios que continham subrelatórios não abriam, então instalei o netbeans pra ver o que tava acontecendo e deu uma exceção dizendo: could not load object from location: “C:\Users\Marcos\Documents\NetBeansProjects\TrimPDV\src\Relatorios\”. Ou seja, esse endereço é da outra máquina, então fui no ireport no parâmetro SOBREPORT_DIR (que estava exatamento o caminho mostrado na exceção) e alterei para “\Relatorios\” compilei e colei lá na pasta Relatorios no projeto na outra máquina e deu a mesma exceção mostrando o mesmo endereço errado C:\Users\Marcos\Documents\NetBeansProjects\TrimPDV\src\Relatorios\ , aí eu disse caramba eu já alterei esse negócio, se não for aí onde é que altera então? e tô procurando.
aqui tá o método que uso:

public void buscaTotalDia(String data)throws Exception
    {
        Connection conexao=(Connection) Conexao.daUmaConexao();
        
        HashMap parametros= new HashMap();
        parametros.put("dataDia",data);
        JasperPrint jp= JasperFillManager.fillReport(getClass().getResourceAsStream("/Relatorios/TotalDia.jasper"),parametros,conexao);   
        JasperViewer jrv= new JasperViewer(jp,false);
        jrv.setVisible(true);
        conexao.close();
       
    }

Vale lembrar que; já procurei no forum, todas bibliotecas e todos arquivos .jasper tão copiados ok, o banco tá em um pc(servidor) e a aplicação que monta o relatório via rede em outro, e outros relatórios funcionam normal, só os que tem subrelatórios que não abrem.

Se alguém pude me ajudar desde já agradeço, obrigado!

5 Respostas

Morsil

Bom dia makoto1365, feliz natal.
Então, faça o seguinte, mova seus relatórios para um local que tenha em todos os computadores, como por exemplo a unidade C.
Ai vai no seu projeto e no seu relatório (lá no ireports), e altere os endereços para este novo local onde você colocou.
Blz?

fbl.lucas

Você tem que passar o SUBREPORT_DIR como parametro ao relatorio, exemplo:

parametros.put("SUBREPORT_DIR ",getClass().getResourceAsStream("/Relatorios"));

Seria algo mais ou menos assim o código.

M

Morsil, eu tentei e resultado: na máquina onde foi criado funcionou normal, porém em outra máquina gera o erro:

java.lang.ClassCastException: cannot assign instance of net.sf.jasperreports.engine.base.JRBaseStaticText to field net.sf.jasperreports.engine.base.JRBaseParagraph.paragraphContainer of type net.sf.jasperreports.engine.JRParagraphContainer in instance of net.sf.jasperreports.engine.base.JRBaseParagraph
	at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2063)
	at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1241)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
	at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:498)
	at net.sf.jasperreports.engine.base.JRBaseTextElement.readObject(JRBaseTextElement.java:1191) ...

Lucas, também tentei e no pc ondre foi criado roda normal já em outro dá esse erro:

net.sf.jasperreports.engine.JRException: Could not load object from location : C:\Users\Marcos\Documents\NetBeansProjects\TrimPDV\src\Relatorios\TotalCartao.jasper
	at net.sf.jasperreports.engine.util.JRLoader.loadObjectFromLocation(JRLoader.java:267)
	at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:310)
	at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:259)
	at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:275)
	at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:426)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:1380)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:692)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:255)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:113)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:879)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:782)
	at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:363)
	at DAO.RelatorioDao.buscaTotalDia(RelatorioDao.java:72)

Obrigado pela ajuda, tô pesquisando isso faz algum tempo e não encontro a solução…

C

Faz o que o lucas falou

parametros.put("SUBREPORT_DIR",getClass().getResourceAsStream("/Relatorios"));

e no relatorio altere no subreportExpression para: $P{SUBREPORT_DIR} + “subrelatorio.jasper”

Morsil

Bom dia makoto1365,
a respeito do erro, da uma lida nestes tópicos aqui e vê se algum se aplica:
http://www.guj.com.br/java/258837-ireport-erro-cannot-assign
http://www.guj.com.br/java/244833-erro-utilizando-ireport-resolvido

Criado 25 de dezembro de 2012
Ultima resposta 27 de dez. de 2012
Respostas 5
Participantes 4