Rol*_*and 8 html java applet javafx
我想在网页上嵌入一个或多个JavaFX应用程序.你是怎样做的?
Oracle网站上有一些零碎的内容,但没有完整的例子.
有浏览器中的部署教程,包装基础知识教程等.有人提到Ant任务,有些没有.
所以在我阅读之后仍然有很多问题.我喜欢Ant吗?我需要创建一个applet吗?等等
所有我想看到的是一个最小和完整的"Hello World"示例,以便了解它是如何工作的.即使在StackOverflow这里也只是对同一个问题的答案的点点滴滴,所以这并没有真正帮助.
我昨天提出了这个问题,但删除了它,并认为我会尝试自己.事实证明,当你知道陷阱时,这很容易.因为这已经在这里被问到了,我想我会在答案中分享我的最小和完整的例子.
使用JavaFX示例只需几分钟即可为此html页面创建代码:

Rol*_*and 14
创建一个JavaFX应用程序项目,例如"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);
}
}
Run Code Online (Sandbox Code Playgroud)
在FxInHtml/src/application中
现在您可以使用javafx打包工具来完成剩下的工作.您可以在JDK安装的bin文件夹中找到它.请注意,在Java 7中,它被称为javafxpackager,在Java 8中,它被称为javapackager.假设我们使用Java 8,您的开发环境将类文件编译到bin文件夹中.
打开命令shell并导航到项目文件夹FxInHtml.
使用创建包
javapackager -createjar -outdir compiled -outfile myapp -appclass application.Main -srcdir bin -v
Run Code Online (Sandbox Code Playgroud)
现在,您在已编译的文件夹中有一个可执行的myapp.jar文件.
使用创建jnlp和html文件
javapackager -deploy -outdir deployed -outfile outfile -width 400 -height 400 -name AppName -appclass application.Main -v -srcdir compiled
Run Code Online (Sandbox Code Playgroud)
需要注意的重要一点是"srcdir"永远不是java类的任何目录,而且每个javapackager指令都有所不同.一个javapackager调用的输出目录是另一个的源目录.
现在您调用了该命令,您获得了一个新的"已部署"文件夹,其中包含您需要的所有文件:myapp.jar,outfile.html,outfile.jnlp.
如果在浏览器中打开outfile.html,则可以看到嵌入式JavaFX应用程序.最有可能的是你必须更改安全设置,例如允许执行"file:/"应用程序.但请记住,您在开发后再次删除"file:/",这是一个安全风险.或者你可以签署最后你必须做的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>
Run Code Online (Sandbox Code Playgroud)
为了嵌入各种JavaFX应用程序,您需要修改/复制此部分:
dtjava.embed(
{
url : 'outfile.jnlp',
placeholder : 'javafx-app-placeholder',
width : 200,
height : 200
},
{
javafx : '8.0+'
},
{}
);
Run Code Online (Sandbox Code Playgroud)
并使用此div标签使用占位符在您的html中引用该应用程序
<div id='javafx-app-placeholder'></div>
Run Code Online (Sandbox Code Playgroud)
例如,如果你有一个额外的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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17196 次 |
| 最近记录: |