Spring Boot:java.awt.HeadlessException

vxbzzdmp  于 2023-02-18  发布在  Java
关注(0)|答案(4)|浏览(220)

尝试获取剪贴板示例时。

Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();

此外,我已经尝试运行Spring Boot 应用程序设置头部。

SpringApplicationBuilder builder = new SpringApplicationBuilder(SpringBootApplication.class,args);
        builder.headless(false).run(args);

我们正处于例外之下。

java.awt.HeadlessException
    at sun.awt.HeadlessToolkit.getSystemClipboard(HeadlessToolkit.java:309)
    at com.kpit.ecueditor.core.utils.ClipboardUtility.copyToClipboard(ClipboardUtility.java:57)

有人能告诉我我错过了什么吗?
如果我在简单的Java应用程序中运行相同的剪贴板代码,它可以工作,但在Sping Boot 应用程序中不行。

wz8daaqr

wz8daaqr1#

代替此行

SpringApplication.run(Application.class, args);

使用

SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class);

builder.headless(false);

ConfigurableApplicationContext context = builder.run(args);

会成功的

wfveoks0

wfveoks02#

在Swing应用程序中使用Sping Boot 2时,我遇到了同样的异常。
下面是一个对我有效的例子:
在主类中:

//Main.java
@SpringBootApplication
public class Main implements CommandLineRunner {

    public static void main(String[] args) {
        ApplicationContext contexto = new SpringApplicationBuilder(Main.class)
                .web(WebApplicationType.NONE)
                .headless(false)
                .bannerMode(Banner.Mode.OFF)
                .run(args);
    }

    @Override
    public void run(String... args) throws Exception {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame();
            frame.setVisible(true);
        });
    }
}

在test类中,你需要设置java.awt.headless属性,这样你在测试代码时就不会得到java.awt.HeadlessException:

//MainTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class MainTest {

    @BeforeClass
    public static void setupHeadlessMode() {
        System.setProperty("java.awt.headless", "false");
    }

    @Test
    public void someTest() { }
}

对于那些有这个例外的人,使用JavaFX this answer可能会有所帮助。

inb24sb2

inb24sb23#

您还可以在运行应用程序时只传递a JVM参数,而不需要更改代码:
-Djava.awt.无头=假
在Spring Boot2.2.5.版本上进行测试

x8diyxa7

x8diyxa74#

我也遇到过同样的问题,这里显示的所有解决方案都不起作用。最后注意到数据库服务器用户ID被禁用了,因此发生了这种情况,不需要修改代码。这个错误是非常误导的。
建议遇到类似情况的人验证堆栈跟踪,如果数据库连接类出现此错误,请通过简单的Java类/IDE而不是Sping Boot 测试数据库。

相关问题