从Web浏览器运行应用程序

时间:2014-08-29 18:20:17

标签: java npapi browser-plugin html5-filesystem

我想运行应用程序,例如来自网站的Windows计算器。我考虑使用浏览器插件,Java Web Start,类似代理或任何其他适用于Windows / Linux的解决方案,没有太多工作要做。

插件方式: 我看到它可以用 NPAPI 来完成,但似乎已经死了。我也看了 FileSystemAPI ,但它似乎也死了。有没有什么好的API可以做到这一点?

代理方式: 我想到了用户将安装的Java代理,网站将通过它与系统进行通信。

2 个答案:

答案 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;。

Configure Java window

11)现在再次访问网页浏览器并刷新页面。这次执行java应用程序应该已经过了,点击一个按钮后,它应该打开Windows Calculator。

如果我做错了或者您有任何问题,请不要犹豫写评论。希望它会对某人有所帮助。并记住上升投票;)

答案 1 :(得分:-2)

可能您想使用Applet

您可以将小程序附加到网页,然后将其下载到客户端网站。您将能够执行操作。