"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > launch()를 호출하지 않고 여러 JavaFX 창을 만드는 방법은 무엇입니까?

launch()를 호출하지 않고 여러 JavaFX 창을 만드는 방법은 무엇입니까?

2024-11-09에 게시됨
검색:629

How to Create Multiple JavaFX Windows without Recalling launch()?

Java에서 launch()를 여러 번 호출하는 방법

JavaFX 응용 프로그램 시작 메서드인 launch()는 호출되도록 설계되었습니다. 신청당 한 번만 가능합니다. launch()를 두 번 이상 호출하려고 하면 "IllegalStateException" 오류가 발생합니다.

해결책: Platform.runLater()

호출하는 대신 후속 창 생성을 래핑합니다. launch()를 여러 번 수행하려면 다음 접근 방식을 고려하십시오.

  1. launch()를 한 번 호출하여 JavaFX 런타임을 초기화하고 기본 창을 생성합니다.
  2. JavaFX 런타임을 백그라운드에서 계속 실행합니다. Platform.setImplicitExit(false)를 사용합니다. 이렇게 하면 기본 창이 닫힐 때 JavaFX가 자동으로 종료되는 것을 방지할 수 있습니다.
  3. 새 창을 표시해야 하는 경우 생성 및 표시를 Platform.runLater() 블록에 래핑합니다. 이렇게 하면 JavaFX 작업이 응용 프로그램 스레드에서 실행됩니다.

예제 코드:

public class Wumpus extends Application {
    private static final Insets SAFETY_ZONE = new Insets(10);
    private Label cowerInFear = new Label();
    private Stage mainStage;

    @Override
    public void start(final Stage stage) {
        mainStage = stage;
        mainStage.setAlwaysOnTop(true);
        Platform.setImplicitExit(false);
        cowerInFear.setPadding(SAFETY_ZONE);

        cowerInFear.setOnMouseClicked(event -> Platform.exit());
        stage.setScene(new Scene(cowerInFear));
    }

    public static void main(String[] args) {
        launch(args);

        // Another window can be created here by wrapping its creation
        // and display in a Platform.runLater() block.
        Platform.runLater(() -> {
            Stage newStage = new Stage();
            newStage.setScene(new Scene(new Label("Another Window")));
            newStage.show();
        });
    }
}

참고:

  • 위의 Wumpus 클래스는 사용자 정의 JavaFX 애플리케이션을 사용한 접근 방식을 보여줍니다.
  • Swing 구성 요소와 함께 사용하려면 애플리케이션 대신 JFXPanel을 사용할 수 있습니다.
  • Platform.exit()를 호출하면 JavaFX 런타임이 종료되므로 모든 JavaFX 작업이 완료되면 이 메서드를 호출하는 것이 중요합니다.
릴리스 선언문 이 글은 1729695676에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3