Я использую JavaFX/JXBrowser для отображения предупреждения/диалога, когда веб-страница, загруженная в браузер, вызывает Window.alert или window.confirm. Однако я не могу понять, как вернуть результат диалога подтверждения (true/false) в JS. Поскольку alert.showAndWait() является блокирующей функцией, JS должен ждать этого результата. Однако showAndWait также вызывается в Platform.runLater, поэтому я не могу вернуть результат. Если не написать JS-функции для выполнения истинного/ложного кода и вызвать их на основе результата showAndWait, есть ли другой вариант?Возможно ли вернуть результат диалогового окна подтверждения JS, представленного JXBrowser, в раздел 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())'. Эти два изменения заставили его работать. Однако использовать его, пока на сцене установлен полноэкранный режим, является проблемой. Это отправляет сцену на фоне _all_ окон, пока не будет выбран параметр в диалоговом окне подтверждения. –