gpt4 book ai didi

JavaFX : Use an Indeterminate Progressbar in a splashScreen

转载 作者:行者123 更新时间:2023-12-01 16:45:05 25 4
gpt4 key购买 nike

我有一个启动屏幕:

splash screen我需要进度条的动画(不确定),但它不起作用。

这可能是因为我的线程正在我的 initilize 方法中运行。

public class splashscreenController implements Initializable {
@Override
public void initialize(URL location, ResourceBundle resources) {
new SplashScreen().run();
}

class SplashScreen extends Task {
@Override
public Object call() {

Platform.runLater(new Runnable() {
@Override
public void run()
Parent root = null;
try {
Thread.sleep(3000);
root = FXMLLoader.load(getClass().getResource("../gui/NewUI.fxml"));
} catch (InterruptedException | IOException e) {
e.printStackTrace();
}
Stage stage = new Stage();
stage.initStyle(StageStyle.UNDECORATED);

assert root != null;
Scene scene = new Scene(root, 1280, 720);
stage.setScene(scene);
stage.show();
MainJavaFx.setPrimaryStage(stage);
((Stage) panParent.getScene().getWindow()).close();
}
});
return null;
}
}
}

最佳答案

您的代码中有 2 个问题:

new SplashScreen().run();

Task 不提供在新线程上运行的功能。 run 在调用线程上执行。

class SplashScreen extends Task {
@Override
public Object call() {

Platform.runLater(new Runnable() {
@Override
public void run() {
// placeholder for parts of your code
longRunningOperation();
guiUpdate();
}
});
return null;
}
}

即使您在单独的线程上执行此任务,传递给 Platfrom.runLaterRunnable 也会在 JavaFX 应用程序线程上执行,并从此执行长时间运行的操作runnable 卡住 GUI。

在后台线程上执行所有长时间运行的操作,并且仅使用 Platfrom.runLater 进行短暂更新。

new Thread(new SplashScreen()).start();
class SplashScreen extends Task {
@Override
public Object call() throws IOException, InterruptedException {
Thread.sleep(3000);
final Parent root = FXMLLoader.load(getClass().getResource("../gui/NewUI.fxml"));

Platform.runLater(new Runnable() {
@Override
public void run() {
Stage stage = new Stage();
stage.initStyle(StageStyle.UNDECORATED);

Scene scene = new Scene(root, 1280, 720);
stage.setScene(scene);
stage.show();
MainJavaFx.setPrimaryStage(stage);
((Stage) panParent.getScene().getWindow()).close();
}
});
return null;
}
}

请注意,由于您没有使用 Task 提供的功能,因此您可以简单地使用您的类实现 Runnable,而不是从 Task 继承>.

关于JavaFX : Use an Indeterminate Progressbar in a splashScreen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53285848/

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