Spring Boot 强制使用无头模式

5
我正在尝试使用SikuliX构建一个基于Maven的简单自动化测试应用程序。该应用程序当前是最新版本的Spring Boot应用程序(v.1.4.1)。
这个应用程序本身相当简单(目前只是 POC),包括一个作为应用程序的类(使用SpringBootApplication注解,并实现CommandLineRunner)和一个服务(自动装配的,具有impl 和interface)。没有其他依赖项(只有SikuliX,commons-lang3和spring-boot-starter)。
然而,当我运行应用程序时,Sikuli子系统会抱怨它在无头模式下运行。
我尝试使用 SpringApplicationBuilder.headless(false).web(false).run(args)、System.setProperty("java.awt.headless", "false") 和传递参数到JVM来禁用无头模式。但是,这些选项单独使用或组合使用都无法使Spring Boot假设非无头模式。
是否有任何人遇到过这样的问题呢?
PS:操作系统是Mac和Windows,Java 1.8。
祝大家有愉快的一天。
J.

3
请确保System.setProperty("java.awt.headless", "false")是在main方法中所做的第一件事情。因为如果已经设置了该属性,它的值将被使用;否则将回退到"headless",所以如果首先检测该属性并且看到它是"true"时,无论"headless"的值是否为"false",它仍将是"true"。请参阅原文。 - M. Deinum
你有自定义的横幅图片吗?我注意到当我在资源中有一个 banner.jpg 时,Springboot 会强制将 java.awt.headless 设置为 true - Hans Bogaards
2个回答

2
我遇到了同样的问题,并通过将java.awt.headless系统属性设置为false来解决。这是M. Deinum在对OP的评论中提出的建议,因此要感谢他们。
以下是我如何将其添加到我的主应用程序文件中:
public static void main(String[] args) {
    System.setProperty("java.awt.headless", "false"); //ADD THIS
    SpringApplication.run(MyClass.class, args);
}

0
Sikuli 无法在无头模式下运行。这是一个已知的限制。原因是 Sikuli 内部使用的 Java Robot 库。换句话说,您必须有一台具有屏幕的运行中机器才能使 Sikuli 工作。

1
嗨,尤金,我在我的桌面上运行应用程序,问题是我无法强制它使用head运行,不管传递的jvm参数、系统属性或spring-boot设置,某种程度上jvm/app认为它在无头模式下运行。 - johnnnie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接