我想运行应用程序,例如来自网站的Windows计算器。我考虑使用浏览器插件,Java Web Start,类似代理或任何其他适用于Windows / Linux的解决方案,没有太多工作要做。
插件方式: 我看到它可以用 NPAPI 来完成,但似乎已经死了。我也看了 FileSystemAPI ,但它似乎也死了。有没有什么好的API可以做到这一点?
代理方式: 我想到了用户将安装的Java代理,网站将通过它与系统进行通信。
答案 0 :(得分:1)
我已经设法通过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 Calculator窗口。
5)从这个项目中创建.jar
。在IntelliJ中它很简单:文件 - &gt;项目结构 - &gt;文物 - &gt; &#39; +&#39; - &GT; jar - &gt;来自具有依赖关系的模块。选择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)执行.jar
,为jarsigner jsw.jar jdc
签名。最有可能它会抱怨主目录中缺少.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,看看会发生什么。每当浏览器向你展示危险时,请继续同意执行它。如果失败,最有可能是因为拒绝自签名证书。打开&#34;配置Java&#34;菜单并将http://localhost:8080
条目添加到&#34;例外网站列表&#34;。
11)现在再次访问网页浏览器并刷新页面。这次执行java应用程序应该已经过了,点击一个按钮后,它应该打开Windows Calculator。
如果我做错了或者您有任何问题,请不要犹豫写评论。希望它会对某人有所帮助。并记住上升投票;)答案 1 :(得分:-2)
可能您想使用Applet?
您可以将小程序附加到网页,然后将其下载到客户端网站。您将能够执行操作。