gpt4 book ai didi

java - 从任务中关闭 JavaFx 中的阶段

转载 作者:行者123 更新时间:2023-11-30 03:53:39 25 4
gpt4 key购买 nike

我正在尝试从任务(线程)关闭 JavaFX 中的阶段。

为了完成此任务,我尝试将对 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);
}
}

类(class)任务者:

导入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 应用程序线程上调用该方法。 (在 Java 8 中,您的代码实际上会抛出异常。)

使用 TasksetOnSucceeded() 处理程序在如下情况下关闭阶段:

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;
}
}

关于java - 从任务中关闭 JavaFx 中的阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com