Spring Boot : java.awt.HeadlessException

2022-09-02 11:48:47

当我们尝试获取剪贴板实例时。

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

我也尝试通过设置头部来运行Spring启动应用程序。

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应用程序中运行相同的剪贴板代码,它可以工作,但不在spring引导应用程序中。


答案 1

而不是这条线

 SpringApplication.run(Application.class, args);

SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class);

builder.headless(false);

ConfigurableApplicationContext context = builder.run(args);

它将起作用


答案 2

我有同样的异常,在秋千应用程序中使用Spring 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);
        });
    }
}

在测试类中,您需要设置java.awt.headless propety,以便在测试代码时不会得到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有此异常的人来说,这个答案可能会有所帮助。


推荐