【问题标题】:How to make loading scene before it connects to the MySQL database?如何在连接 MySQL 数据库之前制作加载场景?
【发布时间】:2019-03-24 20:31:24
【问题描述】:

我正在尝试制作一个加载窗口。但我对 MySQL 驱动程序有疑问。问题是,当我将一些对象(在我的情况下为 GIF(但我也尝试过矩形))添加到我的场景(到组)然后它连接到数据库时,舞台不会显示任何对象,直到数据库连接完成。

我尝试了一些在 Internet 上找到的示例,但没有任何效果。所以我在这里寻求帮助。这是我尝试过的代码。

private void afterClick() {
    showLoading();
    username = name.getText();
    password = passField.getText();
    if ((username.length() == 0) && (password.length() == 0)) {
        Alert.printInformation("Nezadali jste přihlašovací údaje.");
    } else if (username.length() == 0) {
        Alert.printInformation("Nezadali jste login.");
    } else if (password.length() == 0) {
        Alert.printInformation("Nezadali jste heslo.");
    } else {
        DBConnection connection = new DBConnection();
        if(connection.connect()){
            if (check.isSelected()) {
                FileStream.writeToFile("Account.txt", LoginMenu.username + ";" + LoginMenu.password, false);
            } else {
                FileStream.writeToFile("Account.txt", "empty", false);
            }
            App.showScene(MenuName.MainMenu);
        }
    }

}



void showLoading(){

    ImageView loading = new ImageView(new Image("file:Wallpapers/loading.gif"));
    loading.setX(App.width -100);
    loading.setY(App.height - 100);
    loading.setFitWidth(60);
    loading.setFitHeight(60);

    Stage stage = new Stage();
    Group group = new Group();
    Scene scene1 = new Scene(group);
    group.getChildren().add(loading);
    stage.setScene(scene1);
    scene1.setFill(Color.TRANSPARENT);
    stage.initStyle(StageStyle.TRANSPARENT);
    stage.show();
}

【问题讨论】:

  • 您绝不能在 JavaFX 应用程序线程 上阻塞或运行长时间运行的任务。当您这样做时,它会阻止线程执行任何其他导致冻结 GUI 的操作。您应该将繁重的工作转移到另一个线程——但请记住,您必须永远不要从后台线程修改 GUI。请参阅Concurrency in JavaFX 了解更多信息。
  • 看看this是否有帮助。

标签: java mysql javafx


【解决方案1】:

很简单!您可以使用覆盖初始化方法进行一些“预”移动。

class YourControllerClass implements Initializable{
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        //Do stuff
    }
}

您也可以像这样在初始化方法 new Thread 中运行以防止阻塞您的应用程序。

new Thread(() -> {
    //Your stuff
}).run();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多