Spring Boot: java.awt.HeadlessException - PullRequest
0 голосов
/ 23 июня 2018

Когда мы пытаемся получить экземпляр буфера обмена.

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-приложении, оно работает, но не в приложении весенней загрузки.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

вместо этой строки

 SpringApplication.run(Application.class, args);

использовать

SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class);

builder.headless(false);

ConfigurableApplicationContext context = builder.run(args);

Будет работать

0 голосов
/ 12 сентября 2018

У меня было то же исключение, использующее Spring Boot 2 в приложении Swing.

Вот пример того, что у меня сработало:

В основном классе:

//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, чтобы при тестировании кода не получалось исключение 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 , этот ответ может помочь.

...