Java 绘制图像时无头异常
Java Headless exception while draw image
我需要像这样在服务器端修改图像(调整大小+添加文本):
BufferedImage tmp = new BufferedImage(image.getWidth() + 50, image.getHeight() + 100, BufferedImage.TYPE_INT_RGB);
Graphics graphics = tmp.getGraphics();
graphics.fillRect(0, 0, canvas.getWidth(), 40);
graphics.drawImage(image, 0, 40, null);
graphics.setFont(graphics.getFont().deriveFont(25f));
graphics.setColor(Color.red);
graphics.drawString(textImage, 20, 30);
graphics.dispose();
但是,我得到这个错误
Caused by: java.awt.HeadlessException
有什么我忘了的吗?在本地运行正常,但在 Linux 服务器上出现上述错误。
感谢您的帮助。
编辑:或者是否有避免这种无头异常的解决方法?
EDIT2:好的,我从服务器获得了日志:
Caused by: java.awt.HeadlessException
at sun.java2d.HeadlessGraphicsEnvironment.getDefaultScreenDevice(HeadlessGraphicsEnvironment.java:64)
之前有人试过这样做
GraphicsConfiguration config = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
BufferedImage tmp = config.createCompatibleImage(image.getWidth() + 50, image.getHeight() + 100, BufferedImage.TYPE_INT_RGB);
我前一段时间在没有图形环境的 Linux 服务器上安装 war 应用程序时遇到了这个错误。
使用 -Djava.awt.headless=true
启动 jvm 应该可以解决您的问题。请记住,如果您的代码在应用程序服务器中运行,您将需要使用该参数修改应用程序服务器 VM。
我需要像这样在服务器端修改图像(调整大小+添加文本):
BufferedImage tmp = new BufferedImage(image.getWidth() + 50, image.getHeight() + 100, BufferedImage.TYPE_INT_RGB);
Graphics graphics = tmp.getGraphics();
graphics.fillRect(0, 0, canvas.getWidth(), 40);
graphics.drawImage(image, 0, 40, null);
graphics.setFont(graphics.getFont().deriveFont(25f));
graphics.setColor(Color.red);
graphics.drawString(textImage, 20, 30);
graphics.dispose();
但是,我得到这个错误
Caused by: java.awt.HeadlessException
有什么我忘了的吗?在本地运行正常,但在 Linux 服务器上出现上述错误。
感谢您的帮助。
编辑:或者是否有避免这种无头异常的解决方法?
EDIT2:好的,我从服务器获得了日志:
Caused by: java.awt.HeadlessException
at sun.java2d.HeadlessGraphicsEnvironment.getDefaultScreenDevice(HeadlessGraphicsEnvironment.java:64)
之前有人试过这样做
GraphicsConfiguration config = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
BufferedImage tmp = config.createCompatibleImage(image.getWidth() + 50, image.getHeight() + 100, BufferedImage.TYPE_INT_RGB);
我前一段时间在没有图形环境的 Linux 服务器上安装 war 应用程序时遇到了这个错误。
使用 -Djava.awt.headless=true
启动 jvm 应该可以解决您的问题。请记住,如果您的代码在应用程序服务器中运行,您将需要使用该参数修改应用程序服务器 VM。