来自 JavaScript 的 JavaFX WebView 向上调用不起作用

2023-12-03

我有一个 JavaFX WebView,想要从 Web 视图中显示的“test.html”调用“JavaBridge”类的方法“hello”。 为什么这不起作用?我确保“桥”对象仅在页面完全呈现时添加到 window.object,因此这可能不是问题。我也看不出 HTML 有什么问题。

这是 HTML 代码(“test.html”):

<html>
<head>
</head>
<body>
    <a href="#click" onclick="bridge.hello()">call java</a>
</body>
</html>

这是 Java 代码:

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.concurrent.Worker.State;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import netscape.javascript.JSObject;

public class HelloWorld extends Application {

  public static void main(String[] args) {
    launch(args);
  }

  @Override
  public void start(Stage primaryStage) {

    java.net.URI uri = java.nio.file.Paths.get("test.html").toAbsolutePath().toUri();
    WebView root = new javafx.scene.web.WebView();
    root.getEngine().load(uri.toString());

    root.getEngine().
    getLoadWorker().
    stateProperty().
    addListener(new ChangeListener < State > () {
      @Override public void changed(ObservableValue ov, State oldState, State newState) {

        if (newState == Worker.State.SUCCEEDED) {
          System.out.println("READY");
          JSObject jsobj = (JSObject) root.getEngine().executeScript("window");
          jsobj.setMember("bridge", new JavaBridge());
        }

      }
    });
    primaryStage.setScene(new javafx.scene.Scene(root, 800, 600));
    primaryStage.show();
  }
}

class JavaBridge {
  public void hello() {
    System.out.println("hello");
  }
}

在 Java 10.0.2 上使用此桥接功能时,我注意到它运行不正常。 Javascript 向上调用并不总是有效。

经过研究,我发现了与 Java 垃圾收集器相关的 OpenJDK bug,这似乎也发生在常规 JDK​​ 上:https://bugs.openjdk.java.net/browse/JDK-8170085

确实,根据https://docs.oracle.com/javase/9​​/docs/api/javafx/scene/web/WebEngine.html,建议将桥存储到变量中以避免Java GC收集对象。

向类添加私有变量后,JS 到 Java 的调用开始在我的应用程序中一直工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自 JavaScript 的 JavaFX WebView 向上调用不起作用 的相关文章

  • 如何延迟加载嵌入在 iframe 上的 YouTube 视频?

    如何将延迟加载应用于iframe嵌入视频 我尝试添加loading eager loading auto and loading lazyload 您可以使用srcdoc你里面的属性iframe标签来加载图像 请参阅以下示例作为参考
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • 如何在jquery中获取保存时间和当前时间的差异?

    我想在 javascript 或 jquery 中获取保存时间和当前时间之间的时差 我节省的时间看起来像Sun Oct 24 15 55 56 GMT 05 30 2010 java中的日期格式代码如下 String newDate 201
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse

随机推荐

  • 如何搜索在 Json 中注册为数组的日期?

    如何搜索在 Json 中注册为数组的日期 PostgreSQL 是数据库 下面是相关代码 1 Model class Business db Model tablename business id db Column db Integer
  • GitHub api 获取最后 N 次提交

    是否可以使用 GitHub API 获取 GitHub 存储库中特定分支的最后 N 次提交 我刚刚发现了一些关于提交的 GitHub api 详细信息here 但他们都没有提供有关最后 N 次提交的详细信息 任何人都可以对此提供更好的想法吗
  • 具体详细说明了 NSUserDefaultsDidChangeNotification 上的默认值已更改的内容

    我开始进入 NSUserDefaults 的内部密室 现在我可以使用提供的选择器加上 NSNotification 对象作为参数成功拦截 NSUserDefaultsDidChangeNotification 通知 然而 返回的 NSNot
  • R-lang:如果等于引号,则删除第一个字符

    R新手 我正在尝试从数据框中的行的开头和结尾删除 如果引号不是第一个或最后一个字符 我不想删除 我不确定为什么以下内容不适用于我的数据的数据框 其中每一行都是文本的数据点 引号并不是字符串 而是文本的一部分 数据框的一行看起来像这样 x l
  • 在 bash 中获取当前日期而不生成子进程

    这个问题纯粹是好奇心 通过运行以下命令很容易获得日期date来自 bash 的命令 但它是一个外部可执行文件 需要生成一个子进程 我想知道是否可以在没有子进程的情况下获取当前时间 日期的格式 我只能在以下上下文中找到对日期 时间格式的引用P
  • RabbitMQ 消费者过载

    我一直在阅读有关 AMQP 消息传递确认的原理 https www rabbitmq com confirms html 确实很有帮助且写得很好的文章 但有关消费者致谢的一个特别的事情确实令人困惑 以下是引用 使用自动确认模式时需要考虑的另
  • MYSQL中递归存储过程获取分层数据的性能

    我有餐桌员工 员工 emp id int 主键 emp name varchar 50 mngr id int 这里 mngr id 要么为 null 要么包含有效的 emp id 这样就形成了组织中员工的层次结构 为了遍历整个层次结构 我
  • Tomcat - UnsupportedClassException

    我在 Tomcat Web 应用程序中部署已编译的类时遇到问题 我正在部署一个要从 servlet 调用的类 但是当我运行该应用程序时 它无法告诉我一个ServletException Error allocating the servle
  • 需要 VSCode sendSequence 键绑定来执行上一个命令、下一个命令、移动到行首、移动到行尾终端命令

    我当前的自定义键绑定 key alt b command workbench action terminal sendSequence when terminalFocus args text u0017 key alt j command
  • 求解线性方程。使用 numpy 的三个变量[重复]

    这个问题在这里已经有答案了 我目前需要一门课程 它必须能够显示和求解如下所示的方程系统 2x 4y 4z 8 34x 3y z 30 x y z 108 我认为编写一个类将方程系统的左侧事物转换为类似矩阵的对象是一个好主意 这是该系统的自制
  • 最大并发 Socket.IO 连接数

    这个问题以前曾被问过 但最近没有被问过 也没有明确的答案 使用 Socket io 在需要添加另一台服务器之前 是否存在可以维持的最大并发连接数 有谁知道有哪些活跃的生产环境正在大规模使用 websockets 特别是 socket io
  • 如何在 ClickHouse 中向可执行 UDF 发送多个参数?

    我有一个输出输入的 python 脚本 usr bin python3 import sys if name main i 0 for line in sys stdin print i line end sys stdout flush
  • MySql REGEXP 运算符

    mySql REGEXP 运算符不区分大小写 该运算符是否有一个版本is区分大小写 Use the BINARY关键字 这迫使REGEXP将字符串匹配为二进制字符串 区分大小写 SELECT a REGEXP A a REGEXP BINA
  • Apache:禁用目录中的 php

    我想在我的服务器上的目录中禁用 php 我认为在 httpd conf 中设置 Options ExecCGI 会阻止执行 php 脚本 但显然我错了 所以 这就是我的 httpd conf 中的内容 它显然不起作用
  • ImportError:无法从“sklearn.base”导入名称“MultiOutputMixin”

    我只想用 scikit learn 进行线性回归 当我尝试导入线性模型包时 出现标题中的错误消息 我尝试遵循类似问题的解决方案 link 该建议基本上是删除请求 MultipleOutputMixin 的代码部分 当我这样做时 MultiO
  • 如何截取 YouTube 屏幕截图

  • 当用户关闭窗口选项卡时 JavaScript 发出警报

    我希望当用户关闭选项卡或窗口时 或者当他尝试移动到与我的站点不同的另一个位置时 弹出一个确认框 并且如果他确认执行 ajax 脚本 然后关闭或更改窗口 我不知道该怎么做 PS 我正在使用 jQuery window unload funct
  • 自定义 HtmlHelper 扩展方法在视图中不可用?

    我翻译了耶利米 克拉克的MVC 的复选框列表助手进入我的 VB Net 项目 但是当我尝试使用我认为的方法时 出现错误 CheckBoxList is not a member of System Web Mvc HtmlHelper Of
  • 如何以编程方式使折线图点处于活动/突出显示状态

    我使用的是 Chart js 2 0 beta2 页面和滑块上有几个折线图 我想突出显示每个折线图上与滑块位置匹配的数据点 它们都具有相同的点数 我不知道如何轻松地在代码中激活一个点 感谢您的任何提示 2 0 测试版解决方案 扩展您选择的图
  • 来自 JavaScript 的 JavaFX WebView 向上调用不起作用

    我有一个 JavaFX WebView 想要从 Web 视图中显示的 test html 调用 JavaBridge 类的方法 hello 为什么这不起作用 我确保 桥 对象仅在页面完全呈现时添加到 window object 因此这可能不