私はJavaFXアプリケーションで作業しています。私のシナリオでは、2つのオプションOK
とCancel
でパスワードを取るJavaFXで作成されたパスワードプロンプトを表示します。私はユーザーが入力したパスワードを返しました。javafxプラットフォームrunlaterの結果を返します
パスワードダイアログを示す私のクラスである -
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;
}
、下記実際にそうでない場合は、このプロンプトは、他のUI上に表示されますので、私は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(""));
いくつかの奇妙な理由により、これは期待どおりに機能しません。それは待って立ち往生し、Runnable.runは決して呼び出されませんでした。 – xar
それは私のために働きます、私は実用的なサンプルを追加して、使用法をさらに実証しました。 – jewelsea
@xar JavaFXアプリケーションスレッドで、おそらく 'latch.await()'が呼び出されました。説明のために答えにテキストを追加しました。 – jewelsea