Spring Boot : java.awt.HeadlessException

流过昼夜 提交于 2019-12-02 08:53:46

问题


When we are trying to get the Clipboard instance.

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

Also i have tried to run the Spring boot application by setting the head.

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

we are getting below exception.

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

Can someone suggest me what i am missing this.

If i run the same clipboard code in simple java application , it is working but not in the spring boot application.


回答1:


I had the same Exception, using Spring Boot 2 in a swing application.

Here is a sample of what worked for me:

In the main class:

//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);
        });
    }
}

In the test class, you'll need to set java.awt.headless propety, so that you won't get a java.awt.HeadlessException when testing the code:

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

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

    @Test
    public void someTest() { }
}

For those who are having this exception using JavaFX this answer might help.




回答2:


instead of this line

 SpringApplication.run(Application.class, args);

use

SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class);

builder.headless(false);

ConfigurableApplicationContext context = builder.run(args);

It will work



来源:https://stackoverflow.com/questions/51004447/spring-boot-java-awt-headlessexception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!