获取NullPointerException,将JasperReports转换为多线程应用程序

时间:2018-06-12 06:53:22

标签: java multithreading nullpointerexception jasper-reports pdf-generation

当我尝试以多线程方式使用JasperReports时,我收到此错误。

java.lang.NullPointerException
 at java.awt.color.ICC_Profile.activateDeferredProfile(ICC_Profile.java:1086) ~[?:1.7.0_80]
 at java.awt.color.ICC_Profile$1.activate(ICC_Profile.java:742) ~[?:1.7.0_80]
 at sun.java2d.cmm.ProfileDeferralMgr.activateProfiles(ProfileDeferralMgr.java:95) ~[?:1.7.0_80]
 at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:775) ~[?:1.7.0_80]
 at com.lowagie.text.Jpeg.processParameters(Unknown Source) ~[redoute-vendororderlifecycle-batch-deliverynotecrt-96.0.jar:96.0.0]
 at com.lowagie.text.Jpeg.<init>(Unknown Source) ~[redoute-vendororderlifecycle-batch-deliverynotecrt-96.0.jar:96.0.0]
 at com.lowagie.text.Image.getInstance(Unknown Source) ~[redoute-vendororderlifecycle-batch-deliverynotecrt-96.0.jar:96.0.0]
 at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.processImageRetainShape(JRPdfExporter.java:1742)

这是自1.6以来Java中的一个错误

  

从多个线程加载ICC颜色配置文件有时会触发a   JRE的ICC_Profile类中的空指针异常。

此时我通过将JasperReports Export to PDF函数调用到Syncronized函数来解决它,但它就像是多线程应用程序中的瓶颈。

@fabiofdsantos在GitHub上说:

  

&#34;因为jasperreports正在使用   Lowagie(自2012年起被弃用),可能的解决方法是致电   Image.getInstance(renderer.getData(jasperReportsContext));   。同步&#34;

但是我不知道如何使用JasperReports,并且最后使用同步方法,但可能是比我更好的解决方案。

1 个答案:

答案 0 :(得分:0)

我通过将所有JPEG图像重新映射到jasper文件使用的项目中来解决这个问题。我使用PNG图像而不是JPEG。即便我也不需要使用同步方法。