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