设置-Djava.awt.headless = true后的Java Headless异常 [英] Java Headless Exception after setting -Djava.awt.headless=true

查看:1761
本文介绍了设置-Djava.awt.headless = true后的Java Headless异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用:

Linux Debian 6, Java 1.6.29和 Tomcat 6

Linux Debian 6, Java 1.6.29 and Tomcat 6

我看过很多有关它的文章,它们解释了java.awt需要X11库等.但是他们没有解决问题.

I've seen many posts about it explaining that java.awt requires X11 libraries..etc., but they are not solving the problem.

我在框中设置了-Djava.awt.headless = true,并且解决了无头环境的第一个问题,现在我得到了:

I set -Djava.awt.headless=true in my box and I worked around the first problem of the headless environment, now I am getting:

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变量?

I know by doing this I just told java that there is no monitor (and in fact running a standalone java program to check if the environment is headless it does return true). So is it anything to do with the Linux environment like setting the DISPLAY env variable?

感谢您的帮助,

谢谢.

推荐答案

感谢您的答复.

自从您给我以来,我一直在尝试发送短信.从某种意义上说,它仍然行不通:现在不再抛出该异常,而是出于某种原因创建了空白图像.

Since you gave me that I've been trying to text it. Still doesn't work in the sense that: is now not throwing that exception anymore, but creating a blank image for some reason.

所以我从这里出发:

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)并使用您给我的示例:

to the following (getting rid of extends ApplicationFrame) and use the example you gave me:

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()));给出此错误(文件在那里!):

in the log it complains about ImageIO.write(bufferedImage, "gif", new FileOutputStream(path+getFilename())); giving this error (while the file is there!):

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)

有任何线索吗?

这篇关于设置-Djava.awt.headless = true后的Java Headless异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆