You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaFX WebView启动报IllegalAccessError问题求助

解决JavaFX 11中WebView引发的IllegalAccessError问题

你遇到的核心问题有两个:一是VM参数漏掉了WebView所属的javafx.web模块,二是缺少必要的内部包导出权限

先看错误信息里的关键提示:

Caused by: java.lang.IllegalAccessError: superclass access check failed: class com.sun.java.scene.web.WebViewHelper (in unnamed module @0x9efe064) cannot access class com.sun.javafx.scene.ParentHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene to unnamed module @0x9efe064

这说明两点:

  1. 你的代码用到了javafx.web模块里的WebView,但当前VM参数的--add-modules里没包含这个模块,导致WebView的辅助类只能加载到未命名模块中。
  2. javafx.graphics模块没有把内部的com.sun.javafx.scene包导出给未命名模块,导致WebView的辅助类无法访问ParentHelper。

正确的VM参数配置

把你的VM参数替换成下面的完整版本:

--module-path /home/zahar/IdeaProjects/openjfx-11.0.2_linux-x64_bin-sdk/javafx-sdk-11.0.2/lib --add-modules=javafx.controls,javafx.fxml,javafx.graphics,javafx.web --add-exports javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED --add-exports javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED

关键修改点说明

  • 添加javafx.web模块:WebView、WebEngine都是这个模块的核心类,必须显式添加到--add-modules里,否则会导致类加载到未命名模块,引发跨模块访问权限问题。
  • 导出完整的com.sun.javafx.scene:模块系统是按包导出权限的,不是单个类,所以不能只写ParentHelper,要导出整个包给未命名模块(ALL-UNNAMED),这样WebViewHelper就能正常访问ParentHelper了。

额外的小提示

你的代码里加载本地文件的路径C: /test/a.html在Linux系统下是无效的,Linux路径是/开头的,比如你可以改成/home/zahar/test/a.html(根据你的实际文件位置调整),否则点击对应按钮会抛出文件找不到的异常。

完成上述修改后,重新运行程序应该就能正常启动并使用WebView的功能了。

内容的提问来源于stack exchange,提问作者nehippi

火山引擎 最新活动