sourcecode

스프링 부트: java.awt.헤드리스예외.

copyscript 2023. 7. 3. 23:07
반응형

스프링 부트: java.awt.헤드리스예외.

클립보드 인스턴스를 가져오는 중입니다.

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

또한 헤드를 설정하여 스프링 부트 애플리케이션을 실행하려고 했습니다.

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)

제가 여기서 무엇을 놓쳤는지 누가 저에게 제안해 주시겠습니까?

만약 내가 간단한 자바 애플리케이션에서 동일한 클립보드 코드를 실행한다면, 그것은 작동하지만 스프링 부트 애플리케이션에서는 작동하지 않습니다.

이 행 대신에

 SpringApplication.run(Application.class, args);

사용하다

SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class);

builder.headless(false);

ConfigurableApplicationContext context = builder.run(args);

그건 작동할 것이다.

스윙 애플리케이션에서 스프링 부트 2를 사용하는 것과 같은 예외가 있었습니다.

다음은 저에게 효과가 있었던 사례입니다.

기본 클래스:

//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를 얻지 않도록 java.awt.headless 속성을 설정해야 합니다.헤드리스코드 테스트 시 예외:

//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를 사용하는 경우 이 답변이 도움이 될 수 있습니다.

또한 응용 프로그램을 실행할 때 JVM 매개 변수를 전달하면 코드를 변경할 필요가 없습니다.

-Djava.awt.headless=false

Springboot 2.2.5.REASE에서 테스트됨

저는 같은 문제에 직면해 있었습니다. 여기에 나와 있는 모든 솔루션이 제대로 작동하지 않았습니다.마지막으로 DB 서버 사용자 ID가 비활성화되어 있어 코드를 변경할 필요가 없습니다.이 오류는 정말 오해의 소지가 있습니다.

스택 추적을 검증하는 것과 유사한 상황에 직면한 사용자 및 DB 연결 클래스가 Spring 부트 대신 간단한 java 클래스/IDE를 통해 데이터베이스를 테스트하는 경우 제안합니다.

언급URL : https://stackoverflow.com/questions/51004447/spring-boot-java-awt-headlessexception

반응형