我正在使用:
Linux Debian 6、Java 1.6.29和Tomcat 6
我看过很多关于它的文章,解释说java.awt需要X11 libraries..etc.,但他们并没有解决这个问题。
我在我的盒子里设置了-Djava.awt.headless=true,我解决了无头环境的第一个问题,现在我得到了:
java.awt.HeadlessException
java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
java.awt.Window.(Window.java:432)
java.awt.Frame.(Frame.java:403)
javax.swing.JFrame.(JFrame.java:202)
org.jfree.ui.ApplicationFrame.(ApplicationFrame.java:65)
...我知道这样做,我只是告诉java没有监视器(事实上,运行一个独立的java程序来检查环境是否无头,它会返回true)。那么,它是否与Linux环境有关,比如设置DISPLAY env变量?
我很感谢你的帮助,
谢谢。
发布于 2012-04-17 14:33:49
感谢您的回复。
自从你告诉我我一直在试着发短信。仍然不起作用:现在不再抛出异常,而是出于某种原因创建一个空白图像。
所以我从这个开始:
public BarChartGenerator(org.qcri.power.ws.client.Server oServer, ServerStatistics oServerStat, List lVMs, String path) extends ApplicationFrame {
System.setProperty("java.awt.headless", "true");
boolean headless = GraphicsEnvironment.isHeadless();
System.out.println("Headless: " + headless);
Toolkit tk = Toolkit.getDefaultToolkit();
tk.beep();
// generate dataset
final CategoryDataset dataset = createDataset(lVMs);
setChart(createChart(oServer, oServerStat, lVMs, dataset));
// create PNG of the chart...
setFilename("chart_server"+oServer.getHost()+"_"+System.currentTimeMillis()+".gif");
File fImageFile = new File(path+filename);
try {
ChartUtilities.saveChartAsPNG(fImageFile, chart, PowerInterface.CHART_WIDTH, PowerInterface.CHART_HEIGHT);
} catch (Exception e) {
e.printStackTrace();
}
}添加到以下代码(摆脱extends ApplicationFrame)并使用您给我的示例:
public BarChartGenerator(org.qcri.power.ws.client.Server oServer, ServerStatistics oServerStat, List lVMs, String path) {
System.setProperty("java.awt.headless", "true");
boolean headless = GraphicsEnvironment.isHeadless();
System.out.println("Headless: " + headless);
Toolkit tk = Toolkit.getDefaultToolkit();
tk.beep();
// generate dataset
final CategoryDataset dataset = createDataset(lVMs);
setChart(createChart(oServer, oServerStat, lVMs, dataset));
// create PNG of the chart...
setFilename("chart_server"+oServer.getHost()+"_"+System.currentTimeMillis()+".gif");
try {
BufferedImage bufferedImage = getChart().createBufferedImage(PowerInterface.CHART_WIDTH, PowerInterface.CHART_HEIGHT);
ImageIO.write(bufferedImage, "gif", new FileOutputStream(path+getFilename()));
} catch (Exception e) {
e.printStackTrace();
}
}在日志中,它抱怨ImageIO.write(bufferedImage, "gif", new FileOutputStream(path+getFilename()));给出了这个错误(当文件在那里的时候!):
javax.imageio.IIOException: Can't create output stream!
at javax.imageio.ImageIO.write(ImageIO.java:1560)
at org.qcri.power.util.BarChartGenerator.<init>(BarChartGenerator.java:106)有什么线索吗?
发布于 2012-04-16 16:14:31
正如您可以在http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/中读取的那样,如果不支持显示设备、键盘或鼠标,许多组件都会受到影响。与画布、面板和图像组件相关的方法不需要抛出HeadlessException,因为可以为这些组件提供空的对等组件并将其视为轻量级组件。
所以JFrame就是抛出HeadlessException的组件。
如果你想用jfreechart在无头环境中生成图表,这个链接可能会帮助你:http://javaevangelist.blogspot.com.es/2010/11/creating-charts-on-headless-systems.html。
发布于 2012-07-10 22:20:43
-Djava.awt.headless=false在其上方添加一种款待:)
https://stackoverflow.com/questions/10170609
复制相似问题