在使用Windows Vista,Windows 7或Windows 2008的某些计算机上运行我们的应用程序时生成Jasper报告时出现以下错误:
java.lang.RuntimeException:net.sf.jasperreports.engine.JRException:javax.imageio.IIOException:无法创建输出流! at br.com.oobj.relatorio.RRelatorioJasper.gerarJasperPrint(RRelatorioJasper.java:61) at br.com.oobj.relatorio.RRelatorioJasper.gerarJasperPrint(RRelatorioJasper.java:44) at br.com.oobj.cte.dacte.RGerarDacte.gerarJasperPrint(RGerarDacte.java:153) at br.com.oobj.cte.dacte.RGerarDacte.gerarJasperPrint(RGerarDacte.java:66) at br.com.oobj.me.impressao.GeradorDacte.gerarDAME(GeradorDacte.java:55) 在br.com.oobj.me.impressao.GeradorDameDelegator.gerarDAME(GeradorDameDelegator.java:23) 在br.com.oobj.me.impressao.ServicoImpressao.processar(ServicoImpressao.java:117) at br.com.oobj.me.impressao.ConsumidorImpressao.novaMensagem(ConsumidorImpressao.java:71) at br.com.oobj.util.fila.ConsumidorNotificante.run(ConsumidorNotificante.java:229) 在br.com.oobj.me.impressao.ConsumidorImpressao.run(ConsumidorImpressao.java:47) 引起:net.sf.jasperreports.engine.JRException:javax.imageio.IIOException:无法创建输出流! at net.sf.jasperreports.engine.util.JRJdk14ImageEncoder.encode(JRJdk14ImageEncoder.java:90) at net.sf.jasperreports.engine.util.JRAbstractImageEncoder.encode(JRAbstractImageEncoder.java:74) at net.sf.jasperreports.engine.util.JRImageLoader.loadImageDataFromAWTImage(JRImageLoader.java:166) at net.sf.jasperreports.engine.JRImageRenderer.getInstance(JRImageRenderer.java:207) at net.sf.jasperreports.engine.JRImageRenderer.getInstance(JRImageRenderer.java:190) at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:901) at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:870) 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.fillBandNoOverflow(JRVerticalFiller.java:424) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillPageHeader(JRVerticalFiller.java:388) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:249) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:113) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:891) 在net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:814) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:517) at br.com.oobj.relatorio.RRelatorioJasper.gerarJasperPrint(RRelatorioJasper.java:58) ......还有9个 引起:javax.imageio.IIOException:无法创建输出流! 在javax.imageio.ImageIO.write(未知来源) at net.sf.jasperreports.engine.util.JRJdk14ImageEncoder.encode(JRJdk14ImageEncoder.java:86) ......还有27个 引起:javax.imageio.IIOException:无法创建缓存文件! 在javax.imageio.ImageIO.createImageOutputStream(未知来源) ......还有29个 引起:java.io.IOException:系统找不到指定的路径 在java.io.WinNTFileSystem.createFileExclusively(本机方法) 在java.io.File.checkAndCreate(未知来源) 在java.io.File.createTempFile(未知来源) 在javax.imageio.stream.FileCacheImageOutputStream。(未知来源) at com.sun.imageio.spi.OutputStreamImageOutputStreamSpi.createOutputStreamInstance(Unknown Source) ......还有30多个
报告引用外部JPG图像。该应用程序作为Windows服务运行。我已经尝试使用管理员用户启动该服务,但没有成功。
在某些机器中,我们通过将图像重新定位到C:以外的其他驱动器来解决问题:
非常感谢你能提供任何帮助。
谢谢, Jonathas的
答案 0 :(得分:1)
似乎Windows 2008对于某些与服务有关的系统指令有不同的默认值。
在用户模式下运行应用程序(即从Windows用户会话中运行)时,问题无法验证。
此外,如果我们将文件移动到安装了Windows的驱动器以外的驱动器,则不会出现此问题。
这不完全是一个解决方案(我没有确切知道要改变的系统指令),但我相信这些信息最终会有所帮助。