2014-08-29 4 views
1

Я бы хотел запустить приложение, например, калькулятор Windows с веб-сайта. Я рассматриваю использование плагина браузера, Java Web Start, что-то вроде агента или любого другого решения, которое будет работать на windows/linux, без большой работы.Запуск приложения из веб-браузера

Путь плагина: Я видел, что это можно сделать с помощью NPAPI, но он, кажется, мертв. Я также посмотрел на FileSystemAPI, но он также кажется мертвым. Есть ли хороший API для этого?

Agent way: Я думал о Java-агенте, который пользователь установит, и веб-сайт будет связываться с системой через него.

+0

Посмотрите Javascript http://stackoverflow.com/questions/2716284/how-can-i-run-a-local-windows-application-and-have-the-output- be-piped-in-он мог бы сделать что-то вроде этого – TheBat

+0

Вы говорите о запуске программ, которые пользователь уже установил бы на своем компьютере или запускал приложения, которые будут размещаться на вашей веб-странице? –

+0

Вы имеете в виду запустить собственное веб-приложение или апплет, или вы буквально говорите о запуске калькулятора Windows на жестком диске пользователя, когда они нажимают кнопку в браузере? – markspace

ответ

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 это легко: Файл -> Структура проекта -> Артефакты -> '+' -> 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) Подпишите свой .jar, выполнив jarsigner jsw.jar jdc. Скорее всего, он будет жаловаться на отсутствие файла .keystore в домашнем каталоге.Перемещение из testKeys файла там, и изменить его имя .keystore (Если Windows будет resufe установить имя файла с точкой в ​​начале, вы всегда можете выполнить 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 в «Список сайтов исключений».

Configure Java window

11) Теперь идите снова в веб-браузере и обновите страницу. На этот раз выполнение java-приложения должно завершиться, и после нажатия кнопки он должен открыть калькулятор Windows.

Не стесняйтесь писать комментарий, если я делаю что-то неправильно или у вас есть какие-либо вопросы. Надеюсь, это поможет кому-то. И помните о голосовании;)

-2

Возможно, вы хотели бы использовать Applet?

Вы можете прикрепить апплет к веб-странице, он будет загружен на сайт клиента. Они смогут выполнять операции предварительной обработки.

+0

Апплеты уходят; как только Java 1.9 выйдет, они не будут работать –

+0

@SheldonR. Согласен. Так что это причина для downvote? –

+0

Да, это было так. Мне сейчас приходится иметь дело с заменой апплета, поэтому я сказал и проголосовал так, как я ... –

Смежные вопросы