【问题标题】:Getting JavaFX to run via Browser for Simple HelloWorld app让 JavaFX 通过浏览器运行 Simple HelloWorld 应用程序
【发布时间】:2013-05-19 05:06:04
【问题描述】:

我尝试按照各种教程让 JavaFX hello world 应用程序在浏览器中运行。我不敢相信这有那么难,所以我正在寻找任何关于我可能做错了什么的见解。我已经尝试并解决了一些事情(排除明显的):

  • 必须为浏览器下载 32 位 JRE 并确保它们正在使用它
  • 因此使用最新的 JRE (7u21);在 Win 7 64 位上运行
  • 检查了 Windows 控制面板 -> 程序 -> Java 以验证正在使用的 JRE
  • 签署 JAR 文件
  • 尝试从本地文件运行,发现驱动器号无法识别,因此转为通过 Tomcat 6 运行
  • 尝试了对代码库和 url href 的各种更改,但我相信这些都是正确的。
  • 在 IE 10 和 Chrome 中都试过了

我最终得到的是加载 .html(它使用 JavaFX 默认 javascript 引用 jnlp)会旋转一段时间然后失败。如果我尝试直接加载 .jnlp 文件,则会出现异常:

ClassNotFoundException: javafx.application.Application

我确认 jfxrt.jar 位于浏览器正在使用的 JRE 的 lib 文件夹中。

关于我此时可能缺少什么的任何见解/建议?似乎在这一点上它必须是明显/基本的,但我没有看到它。谢谢。

【问题讨论】:

  • 你能出示你的 Manifest 文件吗?

标签: java javafx


【解决方案1】:

为了跟进,我继续使用 javafxpackager。这产生了一个网页,可以在 Chrome 中加载 JavaFX 应用程序。但是,它仍然无法在 IE 中运行。我将把它写成 IE,但因为它可以在 Chrome 中运行。但是,通过查看结果,我确实学到了 javafxpackager 所做的几件事,其结果与大多数手动教程/示例中所描述的并不完全相同。细微的差别,但显然它们很重要。

【讨论】:

    【解决方案2】:

    听起来您的 JAR 中没有 JavaFX 入门类(通常由 Ant 脚本完成)并且没有正确的 JavaFX Manifest 条目。

    不需要将 jfxrt.jar 作为资源添加到您的 JNLP 文件中,并且您不必对其进行签名。

    请出示您的清单文件。

    清单文件应至少包含以下 JavaFX 条目:

    JavaFX-Version: 2.2
    JavaFX-Application-Class: yourPackage.YourApplication
    Main-Class: com/javafx/main/Main
    

    JAR 应该包含由 ant-javafx.jar 提供的 com.javafx.main 包的类(请参阅该 Jar 中的 /resources/classes)。 ant-javafx.jar 由 JDK 提供。

    【讨论】:

    • 我没有做任何明确的清单文件,所以我只有自动生成的。我可以发帖,但可能无济于事。如果加上javafx打包工具的话,这属于我想了解和知道它为我做了什么的情况。
    • 其实如果你想在普通浏览器中运行 javafx 那么我们必须跟进 Manifest 文件。此外,您需要将 jfxrt.jar 保留在类路径中。另外请确保您使用 JavaFX 项目而不是仅使用 Java 项目从 Netbeans 进行编译。
    • @privatejava 不,如果你使用我提到的 Main 类,你不应该(手动)将 jfxrt.jar 添加到你的类路径中,AFAIK。
    【解决方案3】:

    我能够大部分地解决我的问题。我使用的是 Eclipse,而不是 NetBeans,所以手动做了很多。基本问题是我必须将 jfxrt.jar 作为资源包含在 jnlp 文件中(并且该 jar 也必须签名)。

    如果我直接访问 jnlp,我的应用程序现在可以运行,尽管它仍然无法通过 html 页面运行。如果/当我弄清楚那部分时,我会发布更新。

    【讨论】:

    • 不建议为 JavaFX 手动编辑 jnlp 文件。如果您使用 Eclipse 进行开发,最好使用e(fx)clipse。您还应该考虑一些额外的工具支持,例如 JavaFX ant tasks or JavaFX packager 或 JavaFX Maven 或 Gradle 插件。
    • @user1676075 我不认为这是要走的路。看我的回答。
    • 我意识到使用这些工具是最简单的方法。但我想真正了解发生了什么,这(对我而言)意味着手动执行这些步骤,而不是让工具对我隐藏任何部分。一旦我理解了它,我就可以让该工具完成工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2014-10-23
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2016-08-16
    • 2014-01-31
    相关资源
    最近更新 更多