JAVA FX - 隐藏阶段丢失服务任务响应

时间:2015-03-28 22:10:44

标签: java javafx javafx-8

this帖子中,我回答了为什么我的用户界面在service.start()调用后阻塞,并且已经解决了。现在我有另一个"小"问题...在start()之后服务我将隐藏/关闭阶段以在TrayIcon上运行应用程序。

我注意到,使用hide()/ close()舞台,服务将被阻止,永远不会处于成功状态。我试图删除这个电话并且一切正常。

我如何隐藏()/关闭()我的舞台而不阻止服务线程,所以收到最小化托盘的答案?

@FXML
    private void handleRegisterButton() {

        User newUser = new User();
        newUser.setUsername(usernameTextField.getText());
        newUser.setGroup(groupChoicheBox.getSelectionModel().getSelectedItem());
        newUser.setMachineName(machineNameTextField.getText());

        this.mainApp.registerNewUser(newUser); // this is primaryStage from Main

        RegisterUserInvocation service = new RegisterUserInvocation(newUser);

        service.stateProperty().addListener(new InvalidationListener() {
            @Override
            public void invalidated(Observable observable) {
                System.out.println("Task value " + service.getState());
                if(service.getState().equals(Worker.State.SUCCEEDED)) {
                    mainApp.showMessageOnTray("Lan Alert", "Attivo!", MessageType.INFO); // Handler method to show TrayMessage
                }
            }
        });

        service.start();

        /* IF I REMOVE THIS THE APPLICATION WORKS. SURE, THE WINDOW REMAIN VISIBLE*/
        this.mainApp.getPrimaryStage().close();
    }

1 个答案:

答案 0 :(得分:3)

您需要调用Platform.setImplicitExit(false),否则JavaFX运行时将shut down when you close the last stage

请参阅此示例以了解如何使用TrayIcon和JavaFX。

相关问题