Spring Boot : java.awt.HeadlessException

Spring Boot : java.awt.HeadlessException

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

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, youll need to set java.awt.headless propety, so that you wont 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.

Spring Boot : java.awt.HeadlessException

You can also just pass the a JVM parameter when running your application, no code change required:

-Djava.awt.headless=false

Tested on springboot 2.2.5.RELEASE

Leave a Reply

Your email address will not be published. Required fields are marked *