1
ブラウザにロードされたWebページがWindow.alertまたはwindow.confirmを呼び出すときに、JavaFX/JXBrowserを使用して警告/ダイアログを表示しています。しかし、確認ダイアログの結果(true/false)をJSに返す方法を知ることはできません。 alert.showAndWait()はブロッキング関数なので、JSはこの結果を待つ必要があります。ただし、showAndWaitはPlatform.runLaterの実行可能ファイルでも呼び出されるため、結果を返すことはできません。 true/falseコードを実行してshowAndWaitの結果に基づいてJS関数を呼び出すJS関数を書くのに手間がかかりませんが、他にもオプションがありますか?JXBrowserが提示したJS確認ダイアログの結果を、呼び出したJSセクションに戻すことはできますか?
browser.setDialogHandler(new DialogHandler() {
@Override
public CloseStatus onConfirmation(DialogParams params) {
Platform.runLater(new Runnable() {
@Override
public void run() {
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Yes/No");
alert.setHeaderText(null);
alert.setContentText("Yes/No");
Optional<ButtonType> result = alert.showAndWait();
if(result.isPresent())
{
if(result.get()==ButtonType.YES)
{
//Send true to calling JS function
}else
{
//Send false to calling JS function
}
}else
{
System.out.println("No result!");
}
}
});
return null; //because I need to return something and I can't figure out how to get values from the runnable
}
...
}
2変更がなされる必要があります。 1. 'if(result.get()== ButtonType.YES)'を 'ButtonType.OK'と照合する必要があります。 2. 'latch.countDown();'の呼び出しはありません。これは 'if(result.isPresent())'の最後に追加することができます。 これらの2つの変更が機能しました。ステージがフルスクリーンに設定されている間にそれを使用することは問題です。これは、確認ダイアログのオプションが選択されるまで、_all_ windowsの背景にステージを送ります。 –