我在用:
Linux的Debian的6,爪哇29年6月1日和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环境变量?
我会感激你的帮助,
谢谢。
正如你在读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 。
-Djava.awt.headless=false
上面添加它的工作原理一种享受:)
您可能需要安装一个VNC服务器(或类似的东西),因为在这个论坛讨论的主题 。
附录:如果不想保存图表图像的文件,写入使用的一个服务器的输出流writeChartAsPNG()
方法,如建议在这里 。
脱下任何从ApplicationFrame扩展将解决这个问题。 在大多数Tomcat的部署环境中,我们通常没有X11 Windows软件包。 我们需要的不是一个ApplicationFrame(JFram)将使用旧的AWT对象。
我的例子
BloodChart(String title) extends ApplicationFrame
修改 - >
BloodChart(String title)
它的工作对我来说,祝你好运!
感谢您的回复。
既然你给了我,我一直在试图文字吧。 仍然没有在这个意义上的工作:现在没有抛出该异常了,但创造某种原因空白图像。
所以我从这个去:
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)
任何线索?