Java Web Start Anwendungen erstellen

Java Web Start Anwendungen erstellen

Im letzten Artikel konnte man die Java Anwendung direkt von der Seite aus starten. Möglich macht das die Java Web Start Technik. Da ich bis zur nächsten Anwendung garantiert wieder vergessen habe, was ich nun eigentlich dafür machen musste, dokumentiere ich hier kurz meine Schritte, solange sie noch frisch sind.

Das Schwierigste war am Anfang die Anwendung mit den Bilder zum laufen zu bekommen. Der Webstart funktionierte schon, aber die Bilder wurden nicht geladen. Auf der dieser Seite habe ich eine Lösung für das Problem gefunden.

Anwendung vorbereiten

In meinem Javaprogramm hatte ich die Bilder zuvor auf folgende Weise geladen:

Image imgWelt = Toolkit.getDefaultToolkit().getImage("welt.gif");

Wobei welt.gif im selben Verzeichnis liegen musste wie die .jar Datei am Ende damit das Ganze funktionierte. Schöner wäre natürlich gewesen ein extra Verzeichnis für Bilder anzulegen. Aber das hatte ich in dem Fall nicht getan.

Trick ist nun eine neue Klasse anzulegen, z.B. wie auf der verlinkten Seite getan mit dem Namen ResourceAnchor mit einem leeren Konstruktor. Im Programm wird nun eine Variable angelegt die später benutzt wird:

ClassLoader cl = ResourceAnchor.class.getClassLoader();

In meinem Fall, wo das Bild im selben Verzeichnis liegt, lade ich das Bild nun wie folgt:

Image imgWelt = Toolkit.getDefaultToolkit().getImage(cl.getResource("welt3.gif"));

Damit funktionieren auch die Bilder per Webstart.

Eclipse Projekt exportieren

Der nächste Schritt ist nun einfach das Eclipse Projekt als Jar-File zu exportieren. Ich habe mich dabei für eine Runnable-Jar entschieden, aber die normale sollte auch klappen, da im .jnlp-File eh nochmals angegeben werden muss wo die Hauptklasse liegt. Also Rechtsklick auf das Eclipse-Projekt -> Export -> Runnable JAR file -> Next -> Launch Configuration auswählen (vorher einfach mal laufen lassen, damit auch eine existiert) bei Library handling habe ich “Package required libraries into generated JAR” ausgewählt und eine Export destination angeben -> Finish

Jar-File signieren

Damit die Webstart Anwendung überhaupt ausgeführt wird, muss sie signiert werden. Dafür muss erst Mal ein Schlüssel angelegt werden.

CMD öffnen und Keyfile erzeugen:
keytool -genkey -keystore meinKeyStore -alias meinName

Jetzt kann mit dem Keyfile die Jar-Datei signiert werden über:

jarsigner -keystore meinKeyStore -storepass keyStorePasswort -keypass aliasPasswort JARDatei.jar meinName

.jnlp erzeugen

Meine Erzeuger-Verbraucher-Problem .jnlp-Datei sieht so aus:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://santiv.de/webstart/ErzeugerVerbraucher/" href="WebStartErzeugerVerbraucherProblem.jnlp">
 <information>
 <title>Erzeuger-Verbraucher-Problem</title>
 <vendor>Santiv.de - Sven Drees</vendor>
 </information>
 <resources>
 <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
 <jar href='ErzeugerVerbraucherProblem.jar' main='true'/>

 </resources>
 <security>
 <all-permissions/>
 </security>
 <application-desc main-class='org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader'/>
</jnlp>

Wobei hier die  codebase, resources und  application-desc main-class die Dinge sind die eine Anpassung benötigen. Die komische Main-Class kommt von dem erzeugten Runnable-Jar File von Eclipse. Um diese rauszufinden, nenne ich mein Jar-File immer in .zip um und betrete das Verzeichnis. In dem Verzeichnis META-INF liegt dann die MANIFEST.MF in der man den Eintrag Main-Class finden kann.

Button einbinden

Um den Launch-Button zu erhalten brauch nur der folgende Code verwendet werden:

<script type="text/javascript" src="http://www.java.com/js/deployJava.js"></script><script type="text/javascript">// <![CDATA[
    var url = "http://java.sun.com/javase/technologies/desktop/javawebstart/apps/notepad.jnlp";
    deployJava.createWebStartLaunchButton(url, '1.6.0');
// ]]></script>

Ausgewechselt werden brauch nur die Variable url.

Quellen:  

Hinterlasse eine Antwort