title: Why does Swing think it's headless under Spring Boot, but not under Spring or plain Java?
body: <p>The following code works:</p>
  
  <pre><code>import javax.swing.*;
  
  public class HeadlessExceptionDemo {
  
     public static void main(String[] args) {
  
        JFrame frame = new JFrame("HeadlessExceptionDemo");
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
  
     }
  }
  </code></pre>
  
  <p>the following code also works:</p>
  
  <pre><code>import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  
  import javax.swing.*;
  
  @Configuration
  public class HeadlessExceptionDemo {
  
     @Bean
     public JFrame frame() {
        JFrame frame = new JFrame("HeadlessExceptionDemo");
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        return frame;
     }
  
     public static void main(String[] args) {
  
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(HeadlessExceptionDemo.class);
        JFrame frame = ctx.getBean(JFrame.class);
        frame.setVisible(true);
  
     }
  }
  </code></pre>
  
  <p>while the following code does not:</p>
  
  <pre><code>import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.context.ConfigurableApplicationContext;
  import org.springframework.context.annotation.Bean;
  
  import javax.swing.*;
  
  @SpringBootApplication
  public class HeadlessExceptionDemo {
  
      @Bean
      public JFrame frame() {
          JFrame frame = new JFrame("HeadlessExceptionDemo");
          frame.setSize(800, 600);
          frame.setLocationRelativeTo(null);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          return frame;
      }
  
      public static void main(String[] args) {
          ConfigurableApplicationContext ctx = SpringApplication.run(HeadlessExceptionDemo.class, args);
          JFrame frame = ctx.getBean(JFrame.class);
          frame.setVisible(true);
      }
  }
  </code></pre>
  
  <p>Causing exception below:</p>
  
  <pre><code>Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.swing.JFrame]: Factory method 'frame' threw exception; nested exception is java.awt.HeadlessException
      at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
      at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
      ... 23 common frames omitted
  Caused by: java.awt.HeadlessException: null
      at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207) ~[na:1.8.0_45]
      at java.awt.Window.&lt;init&gt;(Window.java:536) ~[na:1.8.0_45]
      at java.awt.Frame.&lt;init&gt;(Frame.java:420) ~[na:1.8.0_45]
      at javax.swing.JFrame.&lt;init&gt;(JFrame.java:233) ~[na:1.8.0_45]
      at com.inthemoon.snippets.springboot.HeadlessExceptionDemo.frame(HeadlessExceptionDemo.java:15) [classes/:na]
      at com.inthemoon.snippets.springboot.HeadlessExceptionDemo$$EnhancerBySpringCGLIB$$3680a05b.CGLIB$frame$0(&lt;generated&gt;) ~[classes/:na]
      at com.inthemoon.snippets.springboot.HeadlessExceptionDemo$$EnhancerBySpringCGLIB$$3680a05b$$FastClassBySpringCGLIB$$b7def9bc.invoke(&lt;generated&gt;) ~[classes/:na]
      at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
      at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:355) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
      at com.inthemoon.snippets.springboot.HeadlessExceptionDemo$$EnhancerBySpringCGLIB$$3680a05b.frame(&lt;generated&gt;) ~[classes/:na]
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45]
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45]
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
      at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
      at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
      ... 24 common frames omitted
  </code></pre>
  
  <p>Why? :)</p>