2012-05-26 22 views
2

jsp的的JFreeChart在Linux機器不顯示

<img alt="" src='<%=url+"/chartDemo/servlet/ChartDemoServlet"%>'> 

我有內部的jsp上的代碼中使用的JFreeChart。我已經在window機器的tomcat內部署了這個應用程序,它的工作非常完美。但是當我在我的linux機器的tomcat裏面複製同一個文件時,除了圖表之外的其他所有jsp內容都被顯示出來。

爲什麼圖表不顯示當我使用linux tomcat運行web應用程序?

當我輸入的servlet直接作爲URL我發現以下異常

java.lang.Error: Probable fatal error:No fonts found. 
    sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1088) 
    sun.font.FontManager.initialiseDeferredFont(FontManager.java:967) 
    sun.font.CompositeFont.doDeferredInitialisation(CompositeFont.java:254) 
    sun.font.CompositeFont.getSlotFont(CompositeFont.java:334) 
    sun.font.CompositeStrike.getStrikeForSlot(CompositeStrike.java:77) 
    sun.font.CompositeStrike.getFontMetrics(CompositeStrike.java:93) 
    sun.font.FontDesignMetrics.initMatrixAndMetrics(FontDesignMetrics.java:358) 
    sun.font.FontDesignMetrics.<init>(FontDesignMetrics.java:349) 
    sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:301) 
    sun.java2d.SunGraphics2D.getFontMetrics(SunGraphics2D.java:790) 
    org.jfree.text.G2TextMeasurer.getStringWidth(G2TextMeasurer.java:79) 
    org.jfree.text.TextUtilities.nextLineBreak(TextUtilities.java:294) 
    org.jfree.text.TextUtilities.createTextBlock(TextUtilities.java:235) 
    org.jfree.chart.title.TextTitle.arrangeRR(TextTitle.java:628) 
    org.jfree.chart.title.TextTitle.arrange(TextTitle.java:497) 
    org.jfree.chart.JFreeChart.drawTitle(JFreeChart.java:1316) 
    org.jfree.chart.JFreeChart.draw(JFreeChart.java:1204) 
    org.jfree.chart.JFreeChart.createBufferedImage(JFreeChart.java:1404) 
    org.jfree.chart.JFreeChart.createBufferedImage(JFreeChart.java:1384) 
    org.jfree.chart.ChartUtilities.writeChartAsPNG(ChartUtilities.java:183) 
    org.jfree.chart.ChartUtilities.writeChartAsPNG(ChartUtilities.java:136) 
    com.ChartDemoServlet.doPost(ChartDemoServlet.java:170) 
    com.ChartDemoServlet.doGet(ChartDemoServlet.java:64) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
+0

我把它生成圖表的servlet也複製過了(或者是同一個項目的一部分,或者在你的網絡中某處可用)。它在其他機器上工作嗎?檢查你添加到「/ chartDemoservlet/ChartDemoServlet」路徑的「url」會發生什麼。我不知道你是如何設置它,但它可能取決於服務器設置(使用不同的端口等)。嘗試用request.getServerName()+「:」+ request.getServerPort() – toniedzwiedz

+0

替換url請檢查編輯的問題 – chetan

+1

此錯誤是由於缺少通常作爲JRE一部分安裝的字體而導致的。你使用OpenJDK還是Oracle?我建議切換到您的Linux機器的Oracle。 – toniedzwiedz

回答

1

是,@湯姆是正確的;尋找使用的字體。早些時候,沒有桌面的Linux也沒有可用的字體(所謂的無頭環境),可由GraphicsEnvironment.isHeadless()和System.getProperty("java.awt.headless");進行測試。你可能只是複製字體,然後做一個registerFont。