GraphicsDevice 导致 java.awt.HeadlessException


原因

java.awt.HeadlessException 出现的原因是java的运行机制引起来的,通常是设计到图片操作的时候会出现这个问题。

我出现的这个问题是由于使用了获取图形界面的方法,GraphicsDevice gs = ge.getDefaultScreenDevice()
我搜索了下,图形界面在网上的解释并不是一个软件,而是带有桌面版的系统

GraphicsEnvironment ge = GraphicsEnvironment
                    .getLocalGraphicsEnvironment();
int transparency = Transparency.OPAQUE;
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
BufferedImage bimage = gc.createCompatibleImage(w, h, transparency);

解决方案

在springboot的启动类里面,加入以下代码。
但是有个问题是如果服务部署在没有图形界面的linux上面,会出现错误,必须把headless设置为true才可以。

最好是尽量不使用这种配置,其他的解决方案暂时没找到。

public static void main(String[] args) {
     

        // SpringBeanLoader.setApplicationContext(SpringApplication.run(Application.class, args));
        // 解决 java.awt.HeadlessException
        SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class);
        builder.headless(false).run(args);

}

不是解决方案的方案

这些代码主要是为了获取 BufferedImage,
代码改为:

BufferedImage bimage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

你可能感兴趣的:(java)