gpt4 book ai didi

java - 在 HTML 网页中嵌入 JavaFX 应用程序

转载 作者:太空狗 更新时间:2023-10-29 13:40:53 26 4
gpt4 key购买 nike

我想在网页上嵌入一个或多个 JavaFX 应用程序。你是怎么做到的?

Oracle 网站上有一些零散的内容,但没有完整示例。

Deployment in the Browser教程, Packaging Basics教程等。提到了 Ant 任务等等。

所以看了之后还是有很多疑问。比如我需要 Ant 吗?我需要创建一个小程序吗?等等

我只想看一个最小的完整“Hello World”示例,以便了解它是如何工作的。即使在 StackOverflow 上,对于同一个问题的答案也只是点点滴滴,所以这并没有真正的帮助。

我昨天提出了这个问题,但删除了它并认为我会尝试自己。事实证明,只有当您知道其中的陷阱时,这才容易。因此,既然这里已经有人问过这个问题,我想我会在答案中分享我的最小且完整的示例。

使用 JavaFX 示例只需几分钟就可以创建此 html 页面的代码:

enter image description here

最佳答案

创建一个 JavaFX 应用程序项目,e. G。 “FxInHtml”。

创建您的 JavaFX 应用程序,例如。例如:

package application;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;


public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Group root = new Group();

Label label = new Label( "Hello World!");
root.getChildren().add( label);

Scene scene = new Scene(root,200,200);

primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
launch(args);
}
}

在 FxInHtml/src/application 中

现在您可以使用 javafx 打包工具来完成剩下的工作。您可以在 JDK 安装的 bin 文件夹中找到它。请注意,在 Java 7 中它称为 javafxpackager,而在 Java 8 中它称为 javapackager。假设我们使用 Java 8,并且您的开发环境将类文件编译到 bin 文件夹中。

打开命令外壳并导航到项目文件夹 FxInHtml。

使用创建包

javapackager -createjar -outdir compiled -outfile myapp -appclass application.Main -srcdir bin -v

现在编译文件夹中有一个可执行的 myapp.jar 文件。

使用以下方法创建 jnlp 和 html 文件

javapackager -deploy -outdir deployed -outfile outfile -width 400 -height 400 -name AppName -appclass application.Main -v -srcdir compiled

需要注意的重要一点是,“srcdir”绝不是任何带有 java 类的目录,并且每个 javapackager 指令都不同。一个 javapackager 调用的输出目录是另一个的源目录。

现在您调用了该命令,您得到了一个“已部署”的新文件夹,其中包含您需要的所有文件:myapp.jar、outfile.html、outfile.jnlp。

如果您在浏览器中打开 outfile.html,您已经可以看到嵌入式 JavaFX 应用程序。很可能您必须更改安全设置,例如。 G。允许执行“文件:/”应用程序。但请记住,您在开发后再次删除“文件:/”,这是一个安全风险。或者您可以签署 jar 文件,无论如何您最终都必须这样做。您也可以使用 javapacker 进行签名。

这是最小且完整的示例。


但让我们看看生成的文件。生成的 outfile.html 如下所示:

<html><head>
<SCRIPT src="http://java.com/js/dtjava.js"></SCRIPT>
<script>
function launchApplication(jnlpfile) {
dtjava.launch( {
url : 'outfile.jnlp'
},
{
javafx : '8.0+'
},
{}
);
return false;
}
</script>

<script>
function javafxEmbed() {
dtjava.embed(
{
url : 'outfile.jnlp',
placeholder : 'javafx-app-placeholder',
width : 200,
height : 200
},
{
javafx : '8.0+'
},
{}
);
}
<!-- Embed FX application into web page once page is loaded -->
dtjava.addOnloadCallback(javafxEmbed);
</script>

</head><body>
<h2>Test page for <b>AppName</b></h2>
<b>Webstart:</b> <a href='outfile.jnlp' onclick="return launchApplication('outfile.jnlp');">click to launch this app as webstart</a><br><hr><br>

<!-- Applet will be inserted here -->
<div id='javafx-app-placeholder'></div>
</body></html>

为了嵌入各种JavaFX应用程序,您需要修改/复制这部分:

dtjava.embed(
{
url : 'outfile.jnlp',
placeholder : 'javafx-app-placeholder',
width : 200,
height : 200
},
{
javafx : '8.0+'
},
{}
);

并使用此 div 标记使用占位符在您的 html 中引用应用程序

<div id='javafx-app-placeholder'></div>

例如,如果您有一个额外的 barchart.jnlp,您可以像这样添加它(我删除了 webstart 部分,因为我们希望嵌入我们的应用程序):

    <html><head>
<SCRIPT src="http://java.com/js/dtjava.js"></SCRIPT>
<script>
function javafxEmbed() {
dtjava.embed(
{
url : 'outfile.jnlp',
placeholder : 'javafx-app-placeholder',
width : 200,
height : 200
},
{
javafx : '8.0+'
},
{}
);

dtjava.embed(
{
url : 'barchart.jnlp',
placeholder : 'barchart-placeholder',
width : 400,
height : 400
},
{
javafx : '8.0+'
},
{}
);
}
<!-- Embed FX application into web page once page is loaded -->
dtjava.addOnloadCallback(javafxEmbed);
</script>

</head><body>
<h2>Test page for <b>AppName</b></h2>
<!-- Applet will be inserted here -->
<div id='javafx-app-placeholder'></div>

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tem
<div id='barchart-placeholder'></div>
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequa ...
</body></html>

关于java - 在 HTML 网页中嵌入 JavaFX 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27958019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com