Malcolm McLean Posted April 10, 2014 Share Posted April 10, 2014 We've recently seen a number of NPE's while generating reports, all of which occur in the TrueTypeFont class.After enabling font logging, the tmp +~JF file seems to be getting removed at some point and then causing the NPE the next time the font is used. There is nothing external that is removing the files, so it might be the GC that is cleaning up and removing them. What's concerning is that as soon as the temp files get deleted, nothing will generate further until we've restarted the JBoss instance JR is running in.Once the file has been deleted, the font is deregistered successfully, but then it tries to reopen the non-existent temp file and eventually fails.Here's a sample stack trace:2014-04-09 11:40:46,162 ERROR [sTDERR] (GENERAL subreports #4) Apr 09, 2014 11:40:46 AM sun.font.TrueTypeFont openINFO: open TTF: /tmp/+~JF2800711352687459302.tmp2014-04-09 11:40:46,167 ERROR [sTDERR] (GENERAL subreports #4) Apr 09, 2014 11:40:46 AM sun.font.TrueTypeFont readBlockSEVERE: While reading /tmp/+~JF2800711352687459302.tmpjava.awt.FontFormatException: java.lang.NullPointerException at sun.font.TrueTypeFont.open(TrueTypeFont.java:310) at sun.font.TrueTypeFont.readBlock(TrueTypeFont.java:338) at sun.font.T2KFontScaler.initNativeScaler(Native Method) at sun.font.T2KFontScaler.<init>(T2KFontScaler.java:73) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at sun.font.FontScaler.getScaler(FontScaler.java:128) at sun.font.TrueTypeFont.getScaler(TrueTypeFont.java:1251) at sun.font.FileFontStrike.<init>(FileFontStrike.java:177) at sun.font.FileFont.createStrike(FileFont.java:95) at sun.font.Font2D.getStrike(Font2D.java:344) at sun.font.Font2D.getStrike(Font2D.java:253) at sun.font.Font2D.getFontMetrics(Font2D.java:399) at java.awt.Font.defaultLineMetrics(Font.java:2175) at java.awt.Font.getLineMetrics(Font.java:2245) at net.sf.jasperreports.engine.fill.SimpleTextLineWrapper.determineLeading(SimpleTextLineWrapper.java:391) at net.sf.jasperreports.engine.fill.SimpleTextLineWrapper.getGeneralFontInfo(SimpleTextLineWrapper.java:343) at net.sf.jasperreports.engine.fill.SimpleTextLineWrapper.createFontInfo(SimpleTextLineWrapper.java:279) at net.sf.jasperreports.engine.fill.SimpleTextLineWrapper.start(SimpleTextLineWrapper.java:241) at net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:411) at net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:623) at net.sf.jasperreports.engine.fill.JRFillTextField.prepare(JRFillTextField.java:685) at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:331) at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:384) at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:358) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2059) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:778) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:288) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:151) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:939) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:871) at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:656) at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59) at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:203) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744)2014-04-09 11:40:46,168 ERROR [sTDERR] (GENERAL subreports #4) Apr 09, 2014 11:40:46 AM sun.font.SunFontManager deRegisterBadFontSEVERE: Deregister bad font: ** TrueType Font: Family=Frutiger LT 55 Roman Name=Frutiger LT 55 Roman style=0 fileName=/tmp/+~JF2800711352687459302.tmp2014-04-09 11:40:46,170 ERROR [sTDERR] (GENERAL subreports #4) Apr 09, 2014 11:40:46 AM sun.font.TrueTypeFont openINFO: open TTF: /tmp/+~JF2800711352687459302.tmpAnd eventually JRFillSubreport fails:2014-04-09 11:40:46,198 ERROR [net.sf.jasperreports.engine.fill.JRFillSubreport] (GENERAL subreports #1) Fill 2: exceptionjava.lang.NullPointerException at sun.font.TrueTypeGlyphMapper.<init>(TrueTypeGlyphMapper.java:62) at sun.font.TrueTypeFont.getMapper(TrueTypeFont.java:1529) at sun.font.FileFontStrike.<init>(FileFontStrike.java:187) at sun.font.FileFont.createStrike(FileFont.java:95) at sun.font.Font2D.getStrike(Font2D.java:344) at sun.font.Font2D.getStrike(Font2D.java:253) at sun.font.Font2D.getFontMetrics(Font2D.java:399) at java.awt.Font.defaultLineMetrics(Font.java:2175) at java.awt.Font.getLineMetrics(Font.java:2245)...We were running JR 4.0.1 and have just upgraded to 5.5.1, yet that didn't help.We were also running JDK 6u45 and tried upgrading to JDK 7u51, but that caused the same problems and they seemed to have far sooner.Any input will be appreciated as we're currently having to restart our system each morning and resubmit the reports that failed because of the font problem. Malcolm Link to comment Share on other sites More sharing options...
rajil Posted December 19, 2017 Share Posted December 19, 2017 Hi;Any solution found for this issue?After setting jvm parameter, -Dsun.java2d.debugfonts=true, found the fonts creating problem in report execution.Suggested at:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/java2d002.htmlbelow is my stack trace:INFO: open TTF: D:Tomcat60temp+~JF518879230854443156.tmp18 Dec, 2017 6:46:40 PM sun.font.TrueTypeFont readBlockSEVERE: While reading D:Tomcat60temp+~JF518879230854443156.tmpjava.awt.FontFormatException: java.lang.NullPointerException at sun.font.TrueTypeFont.open(TrueTypeFont.java:277) at sun.font.TrueTypeFont.readBlock(TrueTypeFont.java:305) at sun.font.FileFont.getGlyphOutlineBounds(Native Method) at sun.font.FileFontStrike.getGlyphOutlineBounds(FileFontStrike.java:883) at sun.font.StandardGlyphVector$GlyphStrike.getGlyphOutlineBounds(StandardGlyphVector.java:1773) at sun.font.StandardGlyphVector.getGlyphOutlineBounds(StandardGlyphVector.java:1156) at sun.font.StandardGlyphVector.getGlyphVisualBounds(StandardGlyphVector.java:568) at sun.font.StandardGlyphVector.getGlyphInfo(StandardGlyphVector.java:846) at sun.font.ExtendedTextSourceLabel.createCharinfo(ExtendedTextSourceLabel.java:566) at sun.font.ExtendedTextSourceLabel.getCharinfo(ExtendedTextSourceLabel.java:492) at sun.font.ExtendedTextSourceLabel.getLineBreakIndex(ExtendedTextSourceLabel.java:438) at java.awt.font.TextMeasurer.calcLineBreak(TextMeasurer.java:308) at java.awt.font.TextMeasurer.getLineBreakIndex(TextMeasurer.java:544) at java.awt.font.LineBreakMeasurer.nextOffset(LineBreakMeasurer.java:340) at net.sf.jasperreports.engine.fill.SimpleTextLineWrapper.measureExactLineBreakIndex(SimpleTextLineWrapper.java:565) at net.sf.jasperreports.engine.fill.SimpleTextLineWrapper.measureExactLine(SimpleTextLineWrapper.java:539) at net.sf.jasperreports.engine.fill.SimpleTextLineWrapper.nextLine(SimpleTextLineWrapper.java:521) at net.sf.jasperreports.engine.fill.TextMeasurer.renderNextLine(TextMeasurer.java:826) at net.sf.jasperreports.engine.fill.TextMeasurer.renderParagraph(TextMeasurer.java:629) at net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:570) at net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:671) at net.sf.jasperreports.engine.fill.JRFillTextField.prepare(JRFillTextField.java:763) at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:536) at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:411) at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:386) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2024) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:748) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:255) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:115) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:580) at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:396) at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:90) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:286) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:759) at com.applied.fincrm.utils.JasperReportBean.getJasperPrintObject(JasperReportBean.java:3154) at com.applied.fincrm.utils.JasperReportBean.generateReportWithoutScheduler(JasperReportBean.java:2191) at com.applied.fincrm.utils.JasperReportBean.generateReport(JasperReportBean.java:415) at com.applied.fincrm.reports.ReportOpenLotsAction.perform(ReportOpenLotsAction.java:618) at org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.java:1786) at com.applied.fincrm.utils.CustActionServlet.processActionPerform(CustActionServlet.java:77) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1585) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:509) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.applied.fincrm.utils.MDCUserServletFilter.doFilter(MDCUserServletFilter.java:72) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291) at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:444) at org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:399) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675) at java.lang.Thread.run(Thread.java:662)18 Dec, 2017 6:46:40 PM sun.font.FontManager deRegisterBadFontSEVERE: Deregister bad font: ** TrueType Font: Family=Tahoma Name=Tahoma style=0 fileName=D:Tomcat60temp+~JF518879230854443156.tmp18 Dec, 2017 6:46:40 PM sun.font.TrueTypeFont openINFO: open TTF: D:Tomcat60temp+~JF518879230854443156.tmp Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now