Я работаю над приложением JavaFX, в моем сценарии показано приглашение пароля, созданное в JavaFX, которое берет пароль с двумя параметрами OK и Cancel. Я вернул пароль, введенный пользователем.
Мой класс отображения пароля -
public static String showPasswordDialog(String title, String message, Stage parentStage, double w, double h) {
try {
Stage stage = new Stage();
PasswordDialogController controller = (PasswordDialogController) Utility.replaceScene("Password.fxml", stage);
passwordDialogController.init(stage, message, "/images/password.png");
if (parentStage != null) {
stage.initOwner(parentStage);
}
stage.initModality(Modality.WINDOW_MODAL);
stage.initStyle(StageStyle.UTILITY);
stage.setResizable(false);
stage.setWidth(w);
stage.setHeight(h);
stage.showAndWait();
return controller.getPassword();
} catch (Exception ex) {
return null;
}
Мой код, где будет отображаться пароль, приведен ниже, на самом деле это приглашение будет отображаться поверх другого пользовательского интерфейса, поэтому мне нужно вставить его внутри Platform.runlater(), иначе он выдает Not on FX application thread. Мне нужно, чтобы эта подсказка пароля отображалась до тех пор, пока я не получу правильный. Как я могу получить значение пароля, если я включил отображение пароля внутри runlater.
Есть ли другой лучший способ?
final String sPassword = null;
do {
Platform.runLater(new Runnable() {
@Override
public void run() {
sPassword = JavaFXDialog.showPasswordDialog(sTaskName + "Password", "Enter the password:", parentStage, 400.0, 160.0);
}
});
if (sPassword == null) {
System.out.println("Entering password cancelled.");
throw new Exception("Cancel");
}
} while (sPassword.equalsIgnoreCase(""));
