[英]Close Stage in JavaFx from task
我正在嘗試從任務(線程)關閉JavaFX中的Stage。
為了完成此任務,我嘗試將對Stage的引用傳遞給擴展Task的類,並在其中設置當前Stage。
然后在call()結束時關閉舞台。 但是.close()和.hide()根本沒有隱藏/關閉舞台 。
類:SampleStage
public class SampleStage extends Application {
@Override
public void start(final Stage primaryStage) throws Exception {
primaryStage.setTitle("JavaFx Dialog");
final Button btn = new Button();
btn.setText("Click me to display popup dialog");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
Stage dialog = new Stage();
Taskee task = new Taskee();
dialog.initStyle(StageStyle.UTILITY);
task.setStage(dialog);
new Thread(task).start();
Scene scene2 = new Scene(new Group(new Text(25, 25, "Hello World!")));
dialog.setScene(scene2);
dialog.show();
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
班級任務負責人:
導入javafx.concurrent.Task; 導入javafx.stage.Stage;
public class Taskee extends Task<Void>{
private Stage stage;
@Override
protected Void call() throws Exception {
for(int i=0;i<10;i++){
//@DoSomething()
for(long l=0;l<10000;l++);
System.out.println("i=" + i);
}
getStage().close();
getStage().hide();
return null;
}
public Stage getStage() {
return stage;
}
public void setStage(Stage stage) {
this.stage = stage;
}
}
注意: getStage().getScene().getWindow().hide();
也不起作用。
hide()
方法必須在FX Application線程上調用。 (在Java 8中,您的代碼實際上會引發異常。)
在以下情況下,使用Task
的setOnSucceeded()
處理程序關閉舞台:
public class Taskee extends Task<Void>{
private Stage stage;
public Taskee() {
setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
if (stage != null) {
stage.hide();
}
}
});
}
@Override
protected Void call() throws Exception {
for(int i=0;i<10;i++){
//@DoSomething()
for(long l=0;l<10000;l++);
System.out.println("i=" + i);
}
return null;
}
public Stage getStage() {
return stage;
}
public void setStage(Stage stage) {
this.stage = stage;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.