Я получаю эту ошибку, когда пытаюсь использовать 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)
Это ошибка в Java, поскольку 1.6
Загрузка цветовых профилей ICC из нескольких потоков иногда вызывает исключение нулевого указателя внутри класса JRE ICC_Profile.
В настоящее время я решаю эту проблему, вызывая функцию экспорта в PDF JasperReports в синхронизированную функцию, но это похоже на узкое место в многопоточном приложении.
@ fabiofdsantos говорят на GitHub это:
"Поскольку jasperreports использует Lowagie (устарело с 2012 года), возможный обходной путь - вызвать Image.getInstance (renderer.getData (jasperReportsContext)); синхронизирован."
Но у меня естья не знаю, как это сделать с JasperReports и таким же образом он использует синхронизированный метод в конце, но, возможно, это лучшее решение, чем мое.