JavaFX - 它真的可以在浏览器中部署吗?

78

1
为什么要在浏览器中使用JavaFX?只需坚持使用常规堆栈即可。 - user1098063
2
提示:如果想使用类似于JavaFX/Swing的方式使用Java构建Web应用程序用户界面,请考虑使用Vaadin Flow - Basil Bourque
4个回答

78

2018年3月Java客户端路线图更新

我鼓励对此问题感兴趣的读者阅读以下Oracle白皮书:

上述文件概述了官方Oracle关于相关技术(JavaFX / Swing / AWT / Applets / WebStart)的立场,它打算支持这些技术的日期以及它打算将哪些技术过渡到与JDK和JRE分开的开源开发项目中。

2017年10月Java 9更新

根据Java 9发布说明

包括Applet API、Java插件、Java Applet Viewer、JNLP和Java Web Start在内的Java Applet和WebStart功能已在JDK 9中弃用,并将在未来版本中删除。

因此,在Java 9+中,使用Java插件在浏览器中部署JavaFX只能使用已弃用的技术。Oracle在Java 9发行说明的另一部分中指出:

在Oracle的JDK 9版本中,Java插件和相关小程序技术被弃用。虽然在JDK 9中仍可用,但这些技术将在未来的版本中考虑从Oracle JDK和JRE中删除。嵌入网页中的小程序和JavaFX应用程序需要Java插件才能运行。请考虑将这些类型的应用程序重写为Java Web Start或自包含应用程序。

注意:Java Web Start并不是一个真正的替代方案,因为它也已被弃用(无论如何,它与在浏览器页面中嵌入和呈现的应用程序有所不同)。还要注意的是,对于那些希望使用Web Start的人,即使它现在已从Oracle JDK 11+中删除,它也作为开源软件提供,关于此信息可以在OpenWebStart上找到。
作为一种提供类似功能的替代方案,请考虑使用jpro,它可以在没有Java插件的情况下在浏览器中部署JavaFX应用程序(截至2017年10月,jpro目前仅处于封闭测试阶段,因此不是可行的解决方案,但也许将来会有所改变...)。
目前,我建议最好的部署JavaFX应用程序的方法是作为self-contained applications,在浏览器之外运行。

Java 7和8的先前答案

JavaFX-它真的可以在浏览器中部署吗?

是的,JavaFX应用程序可以部署,以便它们在托管HTML网页的Web浏览器内运行。

允许此操作的技术是Java插件。该插件当前是基于NPAPI的浏览器插件解决方案。Java插件随Oracle Java 7 Runtime标准环境一起提供。

并非所有浏览器都受支持,仅支持JavaFX支持的配置页面上列出的浏览器。

通过Web浏览器部署有多容易?

在Web浏览器中部署JavaFX项目的最简单方法是:

  1. 在NetBeans中创建一个新的JavaFX项目
  2. 开发一个简单的HelloWorld应用程序
  3. 按照部署你的第一个JavaFX应用程序的说明操作。

这并不难(我认为)。

或者,按照部署JavaFX应用程序的详细参考手册操作(或使用第三方工具)。对于许多项目来说,使用除NetBeans IDE以外的工具来执行打包是更好的方法。然而,通常情况下,让NetBeans IDE处理部署打包任务会更容易一些。


以下内容与回答原问题无关,但提供了一些在此答案评论中要求的意见和信息。
一些建议:
在浏览器中部署Java存在一些陷阱。我鼓励你自己在谷歌上研究这个主题。
根据当前的JavaFX 2.x部署模型,在我看来,对于大多数需要浏览器作为主要运行时容器的应用程序类型,使用JavaFX不是一个合适的解决方案。
检查你的应用程序的部署和运行时要求。基于你的要求和对JavaFX基于浏览器的执行模型的了解,决定是否使用JavaFX技术进行基于浏览器的部署是你的应用程序的正确机制。
嵌入式JavaFX应用程序在浏览器中可能会遇到一些潜在的困难。
一些重要的浏览器(例如Internet Explorer 10iOS Safari和即将推出的Desktop Chrome)目前不允许使用Java浏览器插件所使用的NPAPI执行插件 => 您的一些目标用户可能无法使用您的应用程序。
对于嵌入式浏览器应用程序,您无法完全控制应用程序执行的运行时(浏览器+Java运行时+插件接口)=> 在这些运行时组件更新后,最初安装时正常工作的应用程序可能停止按预期工作。
部署替代方案
如果基于浏览器的部署模型不适合您的应用程序,则有其他方式可以部署JavaFX应用程序(例如WebStart,独立的jar文件和自包含应用程序)。

4
非常感谢您的评论。如果您能列出使用JavaFX在浏览器中的前两到三个主要问题,那么您将为每个人提供很大的帮助。 - Alexander Mills
4
好的,更新答案并提出一些可能存在的困难(不是抱怨)。 - jewelsea
@jewelsea 我想在安卓上运行JavaFX。我在这里阅读了相关信息:https://bitbucket.org/javafxports/android/wiki/Building%20and%20deploying%20JavaFX%20Applications,但是我无法实现,请给我一些建议? - Anshul Parashar
@anshul 我从未使用过Android,所以我不知道。提出一个新问题比在其他问题上发表评论更好。在你的问题中,你可以描述你尝试了什么以及遇到了什么问题,这样人们就可以更好地理解困难并从解决方案中学习。 - jewelsea
我最近尝试了JPro。它已经不处于beta阶段,并且运行良好,尽管存在一些问题,你可以在他们的网站上阅读相关信息。 - LuminousNutria

50

JavaFX - 它真的可以在浏览器中部署吗?

不可以。

以前的答案是肯定的,就像这个回答中所提到的那样。但即使在2013年,当时的迹象也已经表明了情况的变化。然而,到了2016年,答案是否定的。现代浏览器基本上不再支持NPAPI(Firefox 对于 Java 是例外,但仅限于今年年底),而Java插件需要使用 NPAPI。


有趣...这对我来说是一些奇怪的消息 - Alexander Mills

13

截至2016年,您可以在没有任何浏览器插件的情况下使用jpro。而且它甚至可以在移动设备上运行。

编辑1:该项目对于非商业或开源项目是免费的。您可以在此处找到一个“hello world”的示例。


1
我可以在哪里学习关于@KIC的内容? - user8209152
2
它仍处于测试阶段,您可以订阅以在可用时接收通知,或者(我猜)请求测试访问权限。 - KIC
1
有人能展示一下这项技术的真实工作项目吗? - user2602807
JPro不是一种商业产品,需要付费许可证吗? - Curious Coder
@CuriousCoder,它说:jpro 的非商业使用是免费的。 - KIC
@user2602807,他们的网站上有一些演示。我个人最终没有使用它(但把所有东西都转移到了react)。 - KIC

1
我发现了一个偶然的解决方案这里,它是我的Web项目所缺少的。
我必须将它添加到web.xml文件中:
 <mime-mapping>
    <extension>jnlp</extension>
    <mime-type>application/x-java-jnlp-file</mime-type>
</mime-mapping>

1
JNLP在JDK 9中已被弃用,因此不建议使用该技术。请查看JDK 9官方文档:http://www.oracle.com/technetwork/java/javase/9-deprecated-features-3745636.html - Curious Coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接