当我尝试以多线程方式使用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,并且最后使用同步方法,但可能是比我更好的解决方案。
答案 0 :(得分:0)
我通过将所有JPEG图像重新映射到jasper文件使用的项目中来解决这个问题。我使用PNG图像而不是JPEG。即便我也不需要使用同步方法。