창을 닫을 때 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(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
'Nice programing' 카테고리의 다른 글
shared_ptr 및 weak_ptr 차이점 (0) | 2020.11.03 |
---|---|
Mongo에서 .find ()를 수행 할 때 .findOne ()을 수행하는 것과 동일한 결과를 표시하려면 어떻게해야합니까? (0) | 2020.11.03 |
SQL Server에서 테이블 및 인덱스 저장소 크기 가져 오기 (0) | 2020.11.03 |
Xamarin에서 OutOfMemoryException 가져 오기 (0) | 2020.11.03 |
Xcode 8로 업데이트 한 후 오류 : "해당 모듈 없음"및 "대상이 ʻEMBEDDED_CONTENT_CONTAINS_SWIFT` 빌드 설정을 재정의합니다" (0) | 2020.11.03 |