Nice programing

창을 닫을 때 JavaFX 응용 프로그램을 닫는 방법은 무엇입니까?

nicepro 2020. 11. 3. 19:14
반응형

창을 닫을 때 JavaFX 응용 프로그램을 닫는 방법은 무엇입니까?


Swing에서는 setDefaultCloseOperation()창을 닫을 때 전체 애플리케이션을 간단히 종료 할 수 있습니다 .

그러나 JavaFX에서는 동등한 것을 찾을 수 없습니다. 여러 개의 창이 열려 있고 창이 닫혀 있으면 전체 응용 프로그램을 닫고 싶습니다. JavaFX에서이를 수행하는 방법은 무엇입니까?

편집하다:

setOnCloseRequest()창 닫기시 일부 작업을 수행하도록 재정의 수 있음을 이해합니다 . 문제는 전체 응용 프로그램을 종료하려면 어떤 작업을 수행해야합니까?

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        stop();
    }
});

stop()에 정의 된 방법 Application클래스는 아무것도 실시하지 않습니다.


마지막 Stage이 닫히면 응용 프로그램이 자동으로 중지됩니다 . 이 시점에서 클래스 stop()메서드 Application가 호출되므로 다음과 같은 항목이 필요하지 않습니다.setDefaultCloseOperation()

그 전에 애플리케이션을 중지하려면 Platform.exit()예를 들어 통화 에서를 호출 할 수 있습니다 onCloseRequest.

http://docs.oracle.com/javafx/2/api/javafx/application/Application.html 의 javadoc 페이지에서 이러한 모든 정보를 얻을 수 있습니다 Application.


제공된 답변 중 일부가 나를 위해 작동하지 않았거나 (javaw.exe가 창을 닫은 후에도 여전히 실행 중임) 응용 프로그램이 닫힌 후 eclipse가 예외를 표시했습니다.

반면에 이것은 완벽하게 작동합니다.

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent t) {
        Platform.exit();
        System.exit(0);
    }
});

참고로 다음은 Java 8을 사용한 최소 구현입니다.

@Override
public void start(Stage mainStage) throws Exception {

    Scene scene = new Scene(new Region());
    mainStage.setWidth(640);
    mainStage.setHeight(480);
    mainStage.setScene(scene);

    //this makes all stages close and the app exit when the main stage is closed
    mainStage.setOnCloseRequest(e -> Platform.exit());

    //add real stuff to the scene...
    //open secondary stages... etc...
}

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        Platform.exit();
        System.exit(0);
    }
}

이거 해봤 어 .. setOnCloseRequest

setOnCloseRequest(EventHandler<WindowEvent> value)   

한 가지 예가 있습니다


Java 8을 사용하면 다음과 같이 작동했습니다.

@Override
public void start(Stage stage) {
    Scene scene = new Scene(new Region());
    stage.setScene(scene);

    /* ... OTHER STUFF ... */

    stage.setOnCloseRequest(e -> {
        Platform.exit();
        System.exit(0);
    });
}

onCloseRequest 핸들러 또는 창 이벤트를 사용하는 대신 Platform.setImplicitExit(true)응용 프로그램의 시작을 호출 하는 것을 선호 합니다.

JavaDocs에 따르면 :

"If this attribute is true, the JavaFX runtime will implicitly shutdown when the last window is closed; the JavaFX launcher will call the Application.stop() method and terminate the JavaFX application thread."

Example:

@Override
void start(Stage primaryStage) {
    Platform.setImplicitExit(true)
    ...
    // create stage and scene
}

This seemed to work for me:

EventHandler<ActionEvent> quitHandler = quitEvent -> {

        System.exit(0);

    };
    // Set the handler on the Start/Resume button
    quit.setOnAction(quitHandler);

Try

 System.exit(0);

this should terminate thread main and end the main program


getContentPane.remove(jfxPanel);

try it (:


For me only following is working:

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {

        Platform.exit();

        Thread start = new Thread(new Runnable() {
            @Override
            public void run() {
                //TODO Auto-generated method stub
                system.exit(0);     
            }
        });

        start.start();
    }
});

You MUST override the "stop()" method in your Application instance to make it works. If you have overridden even empty "stop()" then the application shuts down gracefully after the last stage is closed (actually the last stage must be the primary stage to make it works completely as in supposed to be). No any additional Platform.exit or setOnCloseRequest calls are need in such case.

참고URL : https://stackoverflow.com/questions/12153622/how-to-close-a-javafx-application-on-window-close

반응형