java - 在 headless (headless)服务器上绘制图像

标签 java glassfish awt headless

我尝试在 headless (headless)服务器上绘制图像 - 想象像一张带有标记的 map - 但什么也没有发生,甚至没有异常(exception)。我已经尝试使用 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;
}

最佳答案

如果服务器是linux或unix,通常需要一个X服务器来运行AWT工作。

通常在linux中使用以下命令启动虚拟X服务器

$ Xvfb :99

然后,您必须使用 DISPLAY 环境变量启动 java 服务器

export DISPLAY=:99

关于java - 在 headless (headless)服务器上绘制图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792976/

相关文章:

java - 迭代对象并以强制转换的方式访问它们

java - 在 JSP EL 中通过常量获取变量不起作用

java - 检测鼠标悬停在 Graphics2D 字符串上

java - GlassFish 4.1 + Hibernate 4.3 = 无法通过 orm.xml 覆盖映射

java - EAR 库的类为 WAR 成员抛出 ClassNotFoundException(不同)

java - 从 Java 获取有效的屏幕尺寸

java - 将图像从一个面板移动到另一个面板

java - spring mvc herbinate 与额外列的多对多关系存在问题

java - 如何获取Android设备当前的媒体类型?

Java:具有相同数量参数的两个方法签名