- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
是否可以使用适用于 Java7 客户端的 JavaFX 内容来丰富基于 Swing 的 JApplet(在 Web 浏览器中运行)?我尝试了以下操作,但没有成功:
a) Swing JApplet:如果我尝试将 JFXPanel 添加到 JApplet,我会在运行时得到 java.lang.ClassNotFoundException: javafx.embed.swing.JFXPanel。
b) 包含 javafx_version 参数的 Swing JApplet(版本 2.2+,使用部署工具包的 dtjava.embed() 时查看生成的 APPLET 标记):将 JFXPanel 添加到 JApplet 会导致 java.lang.ClassCastException:SwingInterop 无法在运行时转换为 javafx.application.Application。
c) JavaFX Applet (javafx.application.Application):swing 内容似乎只能在新的 JFrame 中显示(如 http://www.oracle.com/technetwork/java/javase/overview/javafx-samples-2158687.html 的官方 Oracle 示例所示)但不能在 JavaFX Applet (javafx.application.Application) 本身中。随 Java8 引入的 SwingNode 显然是可行的方法,但我没有找到 Java7 的可靠替代方案。
有什么方法可以通过将 jfxrt.jar 添加到类路径来让选项 a) 运行(因为选项 b)显然以某种方式运行)?
最佳答案
Oracle JavaFX in Swing Applications上有详细教程适用于 Java 7。
我建议您遵循该教程。
请注意,将 jfxrt.jar 与应用程序一起打包不是必需的,也不推荐(出于您在评论中提出的所有原因)。
只需复制并粘贴 Oracle 教程中的示例,以防它们的链接失效。
使用 JavaFX Ant 任务打包具有集成 JavaFX 内容的 Swing 应用程序(关键是 toolkit="swing"
):
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${javafx.sdk.path}/lib/ant-javafx.jar"/>
<fx:jar destfile="dist-web/ColorfulCircles.jar">
<fx:application refid="myapp"/>
<fileset dir="build/classes/">
<include name="**"/>
</fileset>
</fx:jar>
<fx:deploy width="800" height="600" outdir="dist-web"
outfile="SwingInterop">
<fx:info title="Swing Interop"/>
<!-- Mark application as a Swing app -->
<fx:application id="myapp"
mainClass="swinginterop.SwingInterop"
toolkit="swing"/>
<fx:resources>
<fx:fileset dir="dist-web" includes="SwingInterop.jar"/>
</fx:resources>
</fx:deploy>
如果您不使用 JavaFX 打包工具,您仍然可以使用 JavaFX,只需编辑您的 jnlp 文件,使用 jfx 命名空间设置资源:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0"
xmlns:jfx="http://javafx.com"
href="SwingAppWithJavaFXContent.jnlp"
...>
....
<resources>
<j2se version="1.7.0_06+"
href="http://java.sun.com/products/autodl/j2se"/>
<jfx:javafx-runtime version="2.1+"
href="http://javadl.sun.com/webapps/download/GetFile/
javafx-latest/windows-i586/javafx2.jnlp"/>
</resources>
...
</jnlp>
在您的 html 页面中,您嵌入了 Java 部署工具包并使其支持 JavaFX:
<html>
<head>
<SCRIPT src="http://java.com/js/dtjava.js"></SCRIPT>
<script>
function launchApplication(jnlpfile) {
dtjava.launch(
{ url : jnlpfile },
{
javafx : '2.2+',
toolkit: 'swing'
},
{}
);
return false;
}
</script>
</head>
<body>
<h2>Test page</h2>
<a href='SampleApp.jnlp'
onclick="return launchApplication('SampleApp.jnlp');">Click</a>
to launch test app.
</body>
</html>
I want to show JavaFX content (a JFXPanel) within the area of a JApplet within a browser window.
这正是这个答案解释了如何做的(至少是包装部分),JFXPanel javadoc 描述了其余部分。
有关将 JavaFX 嵌入 Swing Applet 的可执行示例,请参阅 JavaFX“SwingInterop”示例代码。您可以从 Java download page 的“JDK 8 演示和示例”链接下载 SwingInterop 示例代码。 . Java 7 下载文件中也提供了 Java 7 等效版本。
关于Applet 和 Java 7 中的 JavaFX - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22759134/
我有一个java小程序,它访问客户端文件系统上的文件。为此,我为我的小程序创建了一个 jar,然后对其进行了签名,现在一切正常。 问题:有什么方法可以让我对小程序类本身进行签名,而不是先创建一个 ja
我制作了一个向用户致意的 Loader Applet,当用户单击该 Applet 上显示的按钮时,它会启动主 applet,并且 Loader Applet 被销毁。 但是点击另一个小程序没有启动!
我是小程序的新手,遇到了一些不寻常的事情。在我经历的一个程序中,applet html tag在 Applet Java file (.java) 中作为评论提及但评论似乎正在执行。这怎么可能? 代码
只是想知道是否有人有过通过 Java Applet 安装硬件驱动程序的经验。我目前正在编写一个小程序,它将访问某些硬件并将嵌入到网页中。为了让最终用户更轻松,我想让它检测是否安装了驱动程序,如果没有安
我在一家政府科学机构工作,该机构通过我们的网站提供大量技术信息。 Web 开发并不是我们真正的强项,但我们过得去。我们当前的许多内容都是通过 Java 小程序提供的。最近我们收到用户的反馈,他们无法访
我不知道是否存在解决方案,但这将是非常可取的。 我正在制作一个 Scala 小程序,我希望主 Applet 类是一个单例,以便可以在小程序的其他地方访问它,有点像: object App extend
import java.util.InputMismatchException; import java.util.Scanner; class Rectangle extends Shape
我的小程序代码编译得很好,但是,我每次都会收到“小程序已启动”消息。请不要阻止我使用 AWT 或 Applet。我只是想完成我的任务。目前,我的代码是: 主要方法 import java.awt.*;
在 Java Card 中,通常是否可以从卡上现有应用程序的上下文中安装新应用程序,例如通过应用程序定义的消息格式发送新代码,然后使用某些卡创建新应用程序实例管理器 API? 还是只能在外部使用相应的
我刚刚开始编写小程序,因此以前从未嵌入过网页。我有 2 个小程序,它们本身运行良好,但是当我尝试在同一页面中运行这 2 个小程序时,只有一个可见。这看起来很奇怪,我尝试为每个小程序使用开始和结束 fo
我有点.NET 导向,并且对Java 很陌生。使用 Eclipse IDE,每当我通过 Applet 扩展我的类时: class xyz extends Applet{ . . . }; 这会产生错误
要创建Applet程序,程序员需要从Applet包继承Applet类,并且Applet类是一个抽象类,这意味着它的继承类必须覆盖Applet类中的所有方法,但Applet则不是这样。程序员可能会或可能
我似乎在这方面找不到任何东西——除了它不能嵌入到 WebView 中。 我目前有一个图像查看产品,可以通过小程序访问并通过 HTML 页面中的 JavaScript 进行控制。 我正在研究使用 Jav
我刚刚学习java applet。我用drawLine()在小程序上画了一条线,当我按下运行时,它正常编译并使用Eclipse的内置小程序查看器显示小程序。这是代码 import java.apple
当我尝试使用 java.applet.Applet 时,出现运行时错误: java.lang.NoClassDefFoundError: java.applet.Applet 我曾尝试手动放置该库,但
我想知道是否有一种方法可以让 Java 类确定它是否在 applet 中使用? 也就是说,我有一个可供第 3 方应用程序和小程序使用的库(一个 .jar 文件)。它确实在 applet 中工作,但我想
我只想在空框架中添加一个按钮,这非常非常简单。 框架没有显示任何内容,尽管程序运行,IDE 告诉我:” java.lang.ClassCastException: Spots cannot be ca
小程序由以下代码组成: public class TestApplet extends Applet { public TestApplet() { EventQueue.invokeLate
我开始问这个问题,然后在提交之前找出答案。我决定无论如何都要发布这个问题,以便遇到同样问题的其他人能够从我的错误中吸取教训。 我遇到了一个小程序问题(实际上是一个 JApplet)无法实例化另一个类,
如何为现代浏览器部署 Java 小程序?我知道有 3 种可能性,但没有人告诉我更喜欢哪一种以及如何使用它们。 有人有这方面的资源吗?我找不到任何:( 最佳答案 如果您可以针对 Java 6 更新 10
我是一名优秀的程序员,十分优秀!