Вдоволь намучившись с разработкой Java Web Start приложения, решил поделиться опытом, дабы те кто начинает не наступали на те же грабли, что и я...
Написать простую программу, и заставить ее работать под Java Web Start - достаточно просто. Но как быть со сложными приложениями, в которых осуществляется доступ к файлам, базе данных и т.д. Вот пример:
Программа, которая может читать, создавать и сохранять текстовые файлы
| Код |
package WebStart;
import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*;
public class WebStartTest { public static void main(String args[]) { TestFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new TestFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 400); frame.setLocationRelativeTo(null); frame.show(); } }
class TestFrame extends JFrame { private JMenuBar bar; private JMenu menu; private JMenuItem open; private JMenuItem save; private JMenuItem saveAs; private JMenuItem exit; private JScrollPane pane; private JTextArea text; private JFileChooser chooser; private String currFileName = null;
public TestFrame() { setIconImage(new ImageIcon(getClass().getResource("JHelp.gif")).getImage()); setTitle("WebStartTest"); open = new JMenuItem("Открыть"); open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { chooser = new JFileChooser(); int r = chooser.showOpenDialog(null); if(r == JFileChooser.APPROVE_OPTION){ currFileName = chooser.getSelectedFile().getPath(); openFile(currFileName); } } }); save = new JMenuItem("Сохранить"); save.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveFile(); } }); saveAs = new JMenuItem("Сохранить как"); saveAs.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveAsFile(); } }); exit = new JMenuItem("Выход"); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); menu = new JMenu("Файл"); menu.add(open); menu.add(save); menu.add(saveAs); menu.add(exit); bar = new JMenuBar(); bar.add(menu); setJMenuBar(bar); pane = new JScrollPane(); text = new JTextArea(); pane.getViewport().add(text,null); getContentPane().add(pane, BorderLayout.CENTER); }
/** * openFile * * @param fileName String */ void openFile(String fileName) { try { File file = new File(fileName); int size = (int)file.length(); int chars_read = 0; FileReader in = new FileReader(file); char[] data = new char[size]; while(in.ready()) { chars_read += in.read(data, chars_read, size - chars_read); } in.close(); text.setText(new String(data, 0, chars_read)); } catch (IOException e) { JOptionPane.showMessageDialog(this,"Ошибка открытия файла " + fileName,"Ошибка",JOptionPane.ERROR_MESSAGE); } }
boolean saveFile() { if (currFileName == null) { return saveAsFile(); } try { File file = new File (currFileName); FileWriter out = new FileWriter(file); String txt = text.getText(); out.write(txt); out.close(); return true; } catch (IOException e) { JOptionPane.showMessageDialog(this,"Ошибка сохранения " + currFileName,"Ошибка",JOptionPane.ERROR_MESSAGE); } return false; }
/** * saveAsFile * * @return boolean */ boolean saveAsFile() { this.repaint(); if (JFileChooser.APPROVE_OPTION == chooser.showSaveDialog(this)) { currFileName = chooser.getSelectedFile().getPath(); this.repaint(); return saveFile(); } else { this.repaint(); return false; } }
}
|
1. Компилируем программу
2. Создаем файл манифеста
| Код |
Manifest-Version: 1.0 Main-Class: webstart.WebStartTest |
3.Создаем jar файл TestU.jar
4.Создаем файл запуска testU.jnlp
| Код |
<?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="http://caffeine-sd.narod.ru/Java/Test" href="testU.jnlp"> <information> <title>WebStartTest</title> <vendor>By AndyB</vendor> <homepage href="testU.html" /> <description></description> </information> <resources> <j2se version="1.3+" /> <jar href="TestU.jar" /> </resources> <application-desc main-class="WebStart.WebStartTest" /> </jnlp>
|
5.Создаем html страницу testU.html
| Код |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>testUnsigned</title> <script type="text/javascript"> var javawsInstalled = false; var isIE = false; var isICE = navigator.userAgent.indexOf("ICEBrowser") >= 0; if (navigator.mimeTypes && navigator.mimeTypes.length) javawsInstalled = navigator.mimeTypes['application/x-java-jnlp-file']; else isIE = true; function insertLink(url, name) { if (javawsInstalled) { document.write("<a href=\"" + url + "\">" + name + "</a>"); } else { if (isICE) { document.write("Your Web View does not support Web Start (no appropriate Web Start plugin is available). "); document.write("Other popular (external) browsers are supported"); } else { document.write("Need to install Java Web Start"); } document.write(" -- for more information, visit "); document.write("<a href=\"http://java.sun.com/products/javawebstart/\">" ); document.write("the Java Web Start page"); document.write("</a>"); } } </script> <script type="text/vbscript"> on error resume next If isIE Then If Not(IsObject(CreateObject("JavaWebStart.IsInstalled"))) Then javawsInstalled = false Else javawsInstalled = true End If End If </script> </head> <body> <h1>Java Web Start application</h1> <script type="text/javascript"> <!-- insertLink("testU.jnlp","WebStartTest"); // --> </script> <noscript> <a href="testU.jnlp">WebStartTest</a> </noscript> </body> </html>
|
6.Публикуем в интернете и пробуем запустить
testUПри выборе любого из пунктов меню, кроме Выхода ничего не происходит.
А все от того, что TestU.jar не подписан...
7.Подписываем TestU.jar переименовав его в TestS.jar
Как подписывать архивы подробно описано в
подписи в апплетах8. Далее необходимо изменить testU.jnlp
| Код |
<?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="http://caffeine-sd.narod.ru/Java/Test" href="testS.jnlp"> <information> <title>WebStartTest</title> <vendor>By AndyB</vendor> <homepage href="testS.html" /> <description></description> </information> <security> <all-permissions/> </security> <resources> <j2se version="1.3+" /> <jar href="TestS.jar" /> </resources> <application-desc main-class="WebStart.WebStartTest" /> </jnlp>
|
9.Заново публикуем в интернете и запускаем
testSВсе работает...
Добавлено @ 09:40 Да, совсем забыл перед запуском подписанной программы у вас спросят доверяете ли вы данной подписи. Если вы ответите да(Start) программа запустится, если нет то соответственно нет
Это сообщение отредактировал(а) Andyb - 25.1.2005, 09:32