Я работаю над приложением 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(""));