在无头服务器上绘制图像

时间:2014-05-21 20:17:57

标签: java glassfish awt headless

我尝试在无头服务器上绘制图像 - 想象一下像带有标记的地图 - 但没有任何反应,甚至不是例外。我已经尝试使用headless = true参数启动应用程序服务器,但它不起作用。有什么想法吗?

public BufferedImage drawOverlay(BufferedImage map, int x, int y) {
    BufferedImage combination = null;

    try {
        InputStream is = FacesContext
                .getCurrentInstance()
                .getExternalContext()
                .getResourceAsStream("/img/marker.png");
        BufferedImage overlay = ImageIO.read(is);

        int mapWidth = map.getWidth();
        int mapHeight = map.getHeight();

        int overlayWidth = overlay.getWidth();
        int overlayHeight = overlay.getHeight();

        int width = Math.max(mapWidth, overlayWidth);
        int height = Math.max(mapHeight, overlayHeight);

        combination = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics g = combination.getGraphics();

        g.drawImage(map, 0, 0, null);
        g.drawImage(overlay, x, y, null);
    }
    catch (IOException ex) {
        LOGGER.log(Level.SEVERE, "Couldn't draw overlay");
    }
    return combination;
}

1 个答案:

答案 0 :(得分:0)

如果服务器是linux或unix,通常需要运行到AWT的X服务器。

使用命令

在Linux中启动虚拟X服务器是偶然的
$ Xvfb :99

然后,您必须使用DISPLAY环境变量

启动Java服务器
export DISPLAY=:99