мне удалось сделать это с помощью 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
в «Список сайтов исключений».
11) Теперь идите снова в веб-браузере и обновите страницу. На этот раз выполнение java-приложения должно завершиться, и после нажатия кнопки он должен открыть калькулятор Windows.
Не стесняйтесь писать комментарий, если я делаю что-то неправильно или у вас есть какие-либо вопросы. Надеюсь, это поможет кому-то. И помните о голосовании;)
Посмотрите Javascript http://stackoverflow.com/questions/2716284/how-can-i-run-a-local-windows-application-and-have-the-output- be-piped-in-он мог бы сделать что-то вроде этого – TheBat
Вы говорите о запуске программ, которые пользователь уже установил бы на своем компьютере или запускал приложения, которые будут размещаться на вашей веб-странице? –
Вы имеете в виду запустить собственное веб-приложение или апплет, или вы буквально говорите о запуске калькулятора Windows на жестком диске пользователя, когда они нажимают кнопку в браузере? – markspace