2012-05-26 2 views
2

JspJFreeChart не отображается в Linux машине

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

У меня есть верхний код внутри JSP использовать JFreeChart. Я развернул это приложение внутри tomcat оконной машины, и его работа прекрасна. Но когда я копирую один и тот же файл внутри tomcat моей Linux-машины, отображается весь другой контент jsp, кроме графика.

Почему диаграмма не отображается Когда я запускаю веб-приложение с помощью linux tomcat?

Когда я вхожу сервлета непосредственно в 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

Я принимаю, что сервлет, который генерирует диаграмму, также скопирован (или является частью того же проекта или доступен где-то в вашей сети). Работает ли он на других мшинах? Проверьте, что происходит с «url», который вы добавляете к пути «/ chartDemoservlet/ChartDemoServlet». Я не знаю, как вы его настраиваете, но может зависеть от настроек сервера (используется другой порт и т. Д.). Попробуйте заменить url request.getServerName() + ":" + request.getServerPort() – toniedzwiedz

+0

Пожалуйста, проверьте отредактированный вопрос – chetan

+1

Эта ошибка вызвана отсутствием шрифтов, которые обычно устанавливаются как часть JRE. Используете ли вы OpenJDK или Oracle? Я предлагаю переключиться на Oracle для вашей Linux-машины. – toniedzwiedz

ответ

1

Да, @tom прав; найдите используемый шрифт (ы). Раньше Linux без рабочего стола также не имел бы доступных шрифтов (так называемая безголовая среда), которые можно было бы проверить GraphicsEnvironment.isHeadless() и System.getProperty("java.awt.headless");. Вы, вероятно, просто можете скопировать шрифты и сделать registerFont.

Смежные вопросы