首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置-Djava.awt.headless=true后出现Java Headless异常

设置-Djava.awt.headless=true后出现Java Headless异常
EN

Stack Overflow用户
提问于 2012-04-16 16:08:51
回答 5查看 20.2K关注 0票数 2

我正在使用:

Linux Debian 6、Java 1.6.29和Tomcat 6

我看过很多关于它的文章,解释说java.awt需要X11 libraries..etc.,但他们并没有解决这个问题。

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

代码语言:javascript
复制
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变量?

我很感谢你的帮助,

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-17 14:33:49

感谢您的回复。

自从你告诉我我一直在试着发短信。仍然不起作用:现在不再抛出异常,而是出于某种原因创建一个空白图像。

所以我从这个开始:

代码语言:javascript
复制
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)并使用您给我的示例:

代码语言:javascript
复制
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()));给出了这个错误(当文件在那里的时候!):

代码语言:javascript
复制
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)

有什么线索吗?

票数 0
EN

Stack Overflow用户

发布于 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

票数 5
EN

Stack Overflow用户

发布于 2012-07-10 22:20:43

代码语言:javascript
复制
-Djava.awt.headless=false

在其上方添加一种款待:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10170609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档