我已经通过 Java Web Start 做到了:
1) 我创建了 Swing 应用程序,源代码如下。基于http://java.dzone.com/articles/java-web-start-jnlp-hello教程。
代码如下:
package com.gogowitczak;
import javax.jnlp.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Main {
static BasicService basicService = null;
public static void main(String args[]) {
JFrame frame = new JFrame("Mkyong Jnlp UnOfficial Guide");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel();
Container content = frame.getContentPane();
content.add(label, BorderLayout.CENTER);
String message = "Jnln Hello Word";
label.setText(message);
try {
basicService = (BasicService)
ServiceManager.lookup("javax.jnlp.BasicService");
} catch (UnavailableServiceException e) {
System.err.println("Lookup failed: " + e);
}
JButton button = new JButton("http://www.mkyong.com");
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
try {
Runtime.getRuntime().exec("C:\\Windows\\System32\\calc.exe");
} catch (IOException e) {
e.printStackTrace();
}
}
};
button.addActionListener(listener);
content.add(button, BorderLayout.SOUTH);
frame.pack();
frame.show();
}
}
2) 除此之外,我还创建了MANIFEST.MF 文件。
文件在src\META-INF\MANIFEST.MF 路径中:
Manifest-Version: 1.0
Main-Class: com.gogowitczak.Main
Permissions: all-permissions
3) 当然还有 .jnlp 文件,用于 Java Web Start。
文件位于src\JNLP-INF\APPLICATION.JNLP 路径中:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/" href="Test.jnlp">
<information>
<title>Jnlp Test</title>
<vendor>MyVendor</vendor>
<homepage href="http://localhost:8080/" />
<description>Testing Testing</description>
</information>
<security>
<all-permissions/>
</security>
<resources>
<!-- <j2se version="1.7+" /> -->
<j2se version="1.7*" java-vm-args="-Xmx32m" max-heap-size="32m" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="jws.jar" />
</resources>
<application-desc main-class="com.gogowitczak.Main" />
</jnlp>
4) 应该可以直接从您使用的 IDE 编译和运行这个项目(IntelliJ 是我的)。单击按钮应打开新的 Windows 计算器窗口。
5) 从此项目创建.jar。在 IntelliJ 中很简单:文件 -> 项目结构 -> 工件 -> '+' -> jar -> 来自具有依赖关系的模块。选择com.gogowitczak.Main 为Main Class。确保选中复选框 Build on make。
6) 再次构建项目。在<project_path>\out\artifacts\<project_name>_jar 你应该找到<project_name>.jar 文件。对我来说是jws.jar。
7) 现在您需要创建自己的证书。需要签名.jar 文件。
您可以通过运行keytool -genkey -keystore testKeys -alias jdc 来实现。 keytool.exe 可以在 JDK 安装目录的 bin 文件夹中找到。对我来说,它是路径C:\Program Files\Java\jdk1.8.0_05\bin\keytool.exe。记住您设置的密码,其他事情现在无关紧要。该方法基于Oracle website
8) 通过执行jarsigner jsw.jar jdc 签署您的.jar。很可能它会抱怨主目录中缺少.keystore 文件。将testKeys文件移出那里,并将其名称更改为.keystore(如果Windows拒绝设置以点开头的文件名,您可以随时执行move testKeys .keystore对其进行重命名。
9) 现在你必须把它放到网络服务器上。最简单的方法是设置 Tomcat。从here 下载,将我们签名的.jar 文件连同APPLICATION.JNLP 的副本一起放入<tomcat_directory>\webapps\ROOT\ 目录。将APPLICATION.JNLP 重命名为Test.jnlp
10) 现在你可以试一试了。转到 gttp://localhost:8080/Test.jnlp 看看会发生什么。每次浏览器就危险向您宣战时,请继续同意执行它。如果失败,很可能是由于拒绝自签名证书引起的。打开“配置 Java”菜单并将 http://localhost:8080 条目添加到“例外站点列表”。
11) 现在再次进入网络浏览器并刷新页面。这次执行java app应该成功了,点击按钮后应该会打开Windows Calculator。
如果我做错了什么或有任何疑问,请随时发表评论。希望它会帮助某人。并记住向上投票;)