JAVA FX - 隐藏阶段丢失服务任务响应
JAVA FX - Hide stage lost service task response
在 this post 中,我回答了为什么我的 UI 在 service.start() 调用后阻塞,并且已解决。现在我有另一个 "little" 问题...在 start() 服务之后,我将 hide/close 阶段到 运行 TrayIcon 上的应用程序。
我注意到在 hide()/close() 阶段,服务将被阻止并且永远不会进入 SUCCEEDED 状态。我已尝试删除此调用并且一切正常。
如何在不阻塞服务线程的情况下隐藏 ()/关闭 () 我的阶段,从而收到托盘上最小化的答案?
@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();
}
您需要调用 Platform.setImplicitExit(false), otherwise the JavaFX runtime will shut down when you close the last stage.
请参阅此示例以了解如何使用 TrayIcon 和 JavaFX。
在 this post 中,我回答了为什么我的 UI 在 service.start() 调用后阻塞,并且已解决。现在我有另一个 "little" 问题...在 start() 服务之后,我将 hide/close 阶段到 运行 TrayIcon 上的应用程序。
我注意到在 hide()/close() 阶段,服务将被阻止并且永远不会进入 SUCCEEDED 状态。我已尝试删除此调用并且一切正常。
如何在不阻塞服务线程的情况下隐藏 ()/关闭 () 我的阶段,从而收到托盘上最小化的答案?
@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();
}
您需要调用 Platform.setImplicitExit(false), otherwise the JavaFX runtime will shut down when you close the last stage.
请参阅此示例以了解如何使用 TrayIcon 和 JavaFX。