You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JavaFX应用部署至HTML页面?JRE9部署遇阻求助

解决JavaFX应用部署到HTML及Java Web Start安全拦截问题

首先得明确:JRE 9里Java Web Start(JWS)已经被标记为废弃,Oracle对它的安全限制卡得特别严格——哪怕你调整了Java控制面板的安全设置,也可能因为签名不规范、权限配置缺失或者JRE本身的安全策略直接拦截。针对你的情况,给你几个可行的部署方案:

方案1:使用自包含应用包(最推荐,稳定无安全问题)

这是JavaFX官方推崇的替代JWS的桌面分发方式,生成的安装包自带JRE环境,用户无需自行安装Java,也不会碰到安全拦截问题:

  • 操作步骤:
    • 确认项目配置正确(JRE 9自带JavaFX,模块化项目需注意module-info.java的模块声明)
    • 用JDK 9自带的javapackager工具生成自包含安装包,命令示例:
      javapackager -deploy -native -outdir out -outfile MyFXApp -srcdir dist -srcfiles MyFXApp.jar -appclass com.yourpackage.MainClass -name "MyJavaFXApp" -title "我的JavaFX应用"
      
    • 执行完成后,out/native目录下会生成对应系统(Windows/macOS/Linux)的安装包,直接分发给用户安装即可。

方案2:升级JDK到LTS版本,用WebAssembly嵌入HTML(必须部署到网页的话)

JRE 9的Web部署方式早已过时,若一定要将应用嵌入HTML页面运行,建议升级到JDK 17+(长期支持版),然后通过Gluon工具将JavaFX编译为WebAssembly(Wasm):

  • 步骤大致如下:
    • 在Maven/Gradle项目中引入Gluon Client插件
    • 执行编译命令生成Wasm格式的应用文件
    • 下载GraalVM的Wasm运行时脚本,将生成的Wasm文件和脚本放在网页目录下,嵌入HTML的示例代码:
      <!-- 引入本地的GraalVM Wasm运行时脚本 -->
      <script src="graalvm-wasm.js"></script>
      <script>
        async function runApp() {
          const wasmModule = await GraalVMWasm.loadWasm('myfxapp.wasm');
          wasmModule.initialize();
        }
        runApp();
      </script>
      
    这种方式无需浏览器安装Java插件,直接在浏览器中运行,完全不存在安全限制问题。

方案3:修复Java Web Start的安全问题(不推荐,因JWS已被彻底移除)

如果非得坚持使用JWS,必须搞定以下细节:

  • 应用Jar包必须使用正规的可信代码签名证书(自签名证书在JRE 9中基本会被直接拦截,即使添加例外也无效)
  • 在JNLP文件中明确配置全权限:
    <security>
      <all-permissions/>
    </security>
    
  • 将应用部署到HTTP/HTTPS服务器上(本地文件路径大概率无法通过安全检查),并将该服务器URL添加到Java控制面板的「例外站点列表」
  • 确保你的JRE 9是最新补丁版本,旧版本的安全策略会更严格

总的来说,优先选择方案1,稳定省心;若必须部署到网页,建议采用方案2升级JDK并使用WebAssembly方式,别再纠结JWS了——它在JDK 11之后就被彻底移除,后续也不会有任何维护支持。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:55:07