JavaFX线程锁定系统

时间:2014-11-25 13:41:02

标签: java multithreading javafx thread-safety

我有一个主舞台,这是我的登录 此阶段的FXML具有Region和ProgressIndicator,其属性为setVisible(false)

成功登录到应用程序之后,当线程启动应用程序时,意图是以下视图此Region和ProgressIndicator,但是在记录线程后开始旋转加载应用程序,但是Region和ProgressIndicator,不可见。

我的主题

Task t = new Task() {

    @Override
    protected Object call() throws Exception {

        Platform.runLater(() -> {
            try {

                new SisgeFX().start();
            } catch (IOException ex) {
                Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
            }
        });
        return null;
    }
};
region.visibleProperty().bind(t.runningProperty());
pi.visibleProperty().bind(t.runningProperty());
Thread th = new Thread(t);
th.start();  

我尝试将两个线程用于引导系统,另一个用于在系统未加载时更新ProgressIndicator,但没有成功,不会生成Excepetion,已经尝试过几种方式。< / p>

我在几次尝试中意识到了什么:

1 - 一个线程并启动而另一个不启动(仅启动加载系统的线程)。

2 - 线程无法启动。

3 - Tread开始但是ProgressIndicator被锁定,它不是动画。

摘录登录:

 @FXML
    private void sysLogin() {
    String user = ctfUserLogin.getText();
    String pass = ctfPassLogin.getText();
    LoginDAO loginDAO = DAOFactory.make(LoginDAO.class);
    Login login = loginDAO.getLogin(user, pass);

    if (login != null) {
        runThread(); // aqui chamo a Thread postado acima.
        ctfPassLogin.setStyle(null);
        ctfUserLogin.setStyle(null);
    } else {
        ctfPassLogin.clear();
        ctfUserLogin.clear();
        ctfPassLogin.setStyle("-fx-border-color:red;");
        ctfUserLogin.setStyle("-fx-border-color:red;");
        //new ShakeTransition(vBox).play();
        new WobbleTransition(vBox).play();
        //new TadaTransition(vBox).play();
    }

}

如何在系统加载时显示ProgressIndicator?

1 个答案:

答案 0 :(得分:0)

在方法开头,请尝试以下声明。

Platform.setImplicitExit(false);