JavaFX+WebView/Javascript:setTimeOut不工作调用堆栈来自Java

JavaFX+WebView/Javascript:setTimeOut不工作调用堆栈来自Java,java,javascript,javafx-8,javafx-webengine,Java,Javascript,Javafx 8,Javafx Webengine,我有一个JavaFX应用程序,它在WebView中加载我自己的HTML/JS应用程序。根据事件的不同,我需要从Java调用Javascript,从Javascript调用Java 从JS到Java时,每一个都是好的,但从Java到Javascript时,我有一些奇怪的行为 基本上,以下是我如何设置两种语言之间的通信: _ 我的Java代码将在提供的jsAdapter上调用publishToJs方法。这将导致执行onPublishToJs。 _ 我得到的是输出_1,但不是输出_2。就像setTim

我有一个JavaFX应用程序,它在WebView中加载我自己的HTML/JS应用程序。根据事件的不同,我需要从Java调用Javascript,从Javascript调用Java

从JS到Java时,每一个都是好的,但从Java到Javascript时,我有一些奇怪的行为

基本上,以下是我如何设置两种语言之间的通信: _

我的Java代码将在提供的jsAdapter上调用publishToJs方法。这将导致执行onPublishToJs。 _

我得到的是输出_1,但不是输出_2。就像setTimeOut上的回调被丢弃一样


从Java调用JS时有任何已知的限制吗?

我重构了代码,并没有使用javaObject.setJsAdapterjsAdapter将jsAdapter注入Java世界,而是将jsAdapter作为窗口的新成员公开给Java

有了这个新的代码结构,我在从Java调用jsAdapter时遇到了异常,因为我是从EDT而不是JavaFX应用程序线程进行调用的

最后,我将jsAdapter调用包装在Platform.runLater->。。。就这样


当使用从JavaFX WebView加载的Javascript时,请确保始终从JavaFX应用程序线程执行Javascript调用。

这几乎是一个猜测-尝试setTimeout回调中的alert以外的其他方法,例如,将某些内容记录到console.JS控制台输出不会转发到Java控制台,因此我在HTML部分添加了FireBug Lite 1.2。在setTimeOut回调中,我将警报“…”替换为console.log“…”,它不会改变任何东西。仍然没有输出2!
var javaObjectInjected = typeof javaObject !== "undefined";

if(javaObjectInjected && !javaObjectInitialized) {
    jThalesEventBusInitialized = true;

    const jsAdapter = {
        publishToJs: onPublishToJs
    };

    javaObject.setJsAdapter(jsAdapter);
}
function onPublishToJs(topic, data) {
    alert('Yeah! We are inside JS'); //output_1

    setTimeout(
        function() {
            alert('inside setTimeOut'); //output_2
        },
        1000
    );
}