# Java Webstart startet .jar file nicht



## Destroyer2442 (13. Jan 2010)

Hallo,

Ich habe mal eine Java Application gschrieben und wollte diese mit Java Webstart ausführen um sie später auf einem Webserver
starten zu können.

Also habe ich mir erstmal ein Tutorial über Java Webstart durchgelesen und folgende Schritte gemacht :

- Alle erforderlichen Klassen in ein .jar file gepackt und diesen auch signiert, was anscheinend auch geklappt hat (die Kommandozeile hat ausgegeben, dass die Signierung sechs Monate gültig ist). Den .jar file selsbt auszuführen hat auch wunderbar geklappt (Application startet sofort).

- Danach habe ich einen .jnlp file erstellt der so aussieht : 

[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<jnlp codebase="http://localhost/" href="BankkontoTester.jnlp" spec="1.0+"> 
    <information> 
        <title>Bankkonto Simulator</title> 
        <vendor>Lädt</vendor> 
        <homepage href="index.php"/> 
        <description>Simuliert einen Bankschalter</description> 
        <description kind="short">Simulator</description> 
    </information> 
    <resources> 
<j2se version="1.5+"/> 
<jar eager="true" href="BankkontoTester.jar" main="true"/> 
    </resources> 
    <application-desc main-class="BankkontoTester"> 
    </application-desc> 
</jnlp[/XML]>

- der BankkontoTester.jar file sowie der BankkontoTester.jnlp file liegen beide im Quellverzeichnis von einem Apache webserver version 2.2, welcher auf meinem Rechner installiert ist und auf dem lokalen host läuft.

- Auf diesem Webserver ist ebenfalls PHP 5.3.1 sowie Mysql server 5.1.42 installiert.

So weit so gut.
Danach habe ich halt Java Webstart version 1.01 installiert und versucht den BankkontoTester.jnlp file auszuführen. 
Danach startet java webstart und lädt den .jnlp file, welcher ebenfalls lesbar zu sein scheint (keine Fehlermeldung). 
Nach kurzer Zeit erscheint auch die Meldung "Anwendung wird gestartet" aber dann passiert gar nichts mehr und das Fenster bleibt ewig offen ohne, dass die Applicattion gestartet wird oder irgendetwas davon zu sehen ist :/.

Wenn ich dann das Fenster schließe und den file direkt noch einmal öffnen will erscheint diesmal nur das Java Webstart Logo und verschwindet nach etwa 10 - 20 sekunden wieder ohne, dass irgendwas passiert ist.

Das selbe Resultat erhalte ich wenn ich vom Apache Webserver aus einer html datei heraus auf die .jnlp datei zugreife mit :


```
<a href="BankkontoTester.jnlp">[Programm name]</a>
```

Ich habe bereits lange mit google und in dutztenden von Foren nach einem ähnlichen Fehler gesucht und bin bisher nicht fündig geworden. Da das Programm auch keine Fehlermeldung ausspuckt kann ich den Fehler so nicht wirklich verstehen aber ich glaube der Fehler könnte am .jnlp file liegen, weil es ehrlich gesagt der erste war den ich geschrieben habe und ich deswegen wahrscheinlich einen Fehler darin nicht sehen kann ^^.

Ich hoffe ihr könnt mir helfen

MFG Destroyer2442


----------



## Gast2 (13. Jan 2010)

Destroyer2442 hat gesagt.:


> Hallo,
> 
> Ich habe mal eine Java Application gschrieben und wollte diese mit Java Webstart ausführen um sie später auf einem Webserver
> starten zu können.
> ...



Lass mal eine Java Konsole mitlaufen und schau ob dieser die Fehler wirft.


----------



## Destroyer2442 (14. Jan 2010)

Ah ok danke für den tipp ^^ 

Damit wird mir folgender Fehler angezeigt :

"Beim Starten/Ausführen der Anwendung ist ein Fehler aufgetreten.

Kategorie: Fehler: ungültiges Argument

Zu viele Argumente angegeben: {-silent, -import, -reverse, -javafxau, -J-Dkernel.download.dialog=false, [noparse]http://dl.javafx.com/javafx-cache.jnlp JavaFX Runtime JNLP Cache Preload[/noparse] }"

leider kann ich damit auch nicht sehr viel Anfangen, weil ich grad nich weiß woher er diese Argumente kommen :/


----------



## Gast2 (14. Jan 2010)

Destroyer2442 hat gesagt.:


> Ah ok danke für den tipp ^^
> 
> Damit wird mir folgender Fehler angezeigt :
> 
> ...



Google halt mal kenn mich mit JavaFX nicht aus oder du dein jnlp file ist falsch


----------



## hansmueller (27. Jan 2010)

Hallo,

ich glaube deine jnlp-Datei hat einen Fehler.

Du schreibst folgendes:

```
<jar eager="true" href="BankkontoTester.jar" main="true"/>
```

Meiner Meinung müßte es so heißen:


```
<jar href="BankkontoTester.jar" download="eager" main="true"/>
```

MfG
hansmueller


----------



## Destroyer2442 (29. Jan 2010)

Hallo Hansmueller,

leider hat deine Veränderung auch keinen Erfolg gehabt, wobei sie auch kein anderes Problem ausgelöst hat ^^.

ich sehe nach wie vor immer wenn ich die jnlp mit Javawebstart ausführen will dieses Fenster : 



Und geht dann einfach nicht mehr weiter ...


----------



## hansmueller (1. Feb 2010)

Versuche mal Folgendes:

Öffne die Eingabeaufforderung (unter Zubehör).
Wechsle in das bin-Verzeichnis der JRE (Befehl: cd C:\Programme\Java\jre6\bin),
und gib dort folgenden Befehl ein:

javaws -verbose <jnlp-Datei>

Statt <jnlp-Datei> mußt du natürlich die Url zu deiner jnlp-Datei eingeben.
(Für weiter Infos siehe: javaws -help)

Wenn ich es richtig sehe müßte die Url
http://localhost/BankkontoTester.jnlp
lauten. (javaws -verbose http://localhost/BankkontoTester.jnlp)

Das -verbose gibt jetzt verschiedene Meldungen aus, vielleicht zeigt es ja einen Fehler oder ähnliches an.
Wenn es an WebStart liegt, sollte hier der Fehler ausgegeben werden.


MfG
hansmueller


----------



## Destroyer2442 (15. Feb 2010)

Auf diese Weise bekomme ich zwar eine Fehlermeldung allerdings ist diese die Selbe wie in der Java-Konsole ausgegeben wurde :

Fehler :
"TooManyArgumentsException[ Zu viele Argumente angegeben: {-verbose, http://localhost/java/BankkontoTester.jnlp }]
	at com.sun.javaws.Main.main(Unknown Source)"

leider weiß ich nicht warum dieser Fehler auftritt und auch mit google habe ich keine nützlichen Informationen gefunden.

MFG


----------



## hansmueller (16. Feb 2010)

Sorry, mein Fehler.
Ich habe übersehen, daß du eine uralte WebStart-Version benutzt. 
Ich vermute, die kennt den verbose-Befehl noch nicht. (Siehe javaws Command Line).

Versuch es mal nur mit: javaws http://localhost/BankkontoTester.jnlp

Alternativ kannst du es auch mal mit einer neueren WebStart-Version versuchen. (1.0.1 ist wirklich nicht mehr aktuell).

Eines verstehe ich allerdings nicht. 
Ich vermute, daß du die Java-Version 1.5 benutzt. (Das schließe ich aus deiner jnlp-Datei)
Da sollte eigendlich schon standardmäßig die WebStart-Version 1.5.0 dabei sein? (Siehe JDK 5.0 Java Web Start-related APIs & Developer Guides -- from Sun Microsystems)
Wieso hast du dann die alte Version installiert????:L

MfG
hansmueller


----------



## Destroyer2442 (17. Feb 2010)

Also, dass Java webstart mit in Java integriert ist habe ich erlich gesagt nicht gewusst ^^.

Ich bin einfach dem tutorial gefolgt,welches einen Link zur version 1.01 von Java webstart sowie der Anweisung diese zu installieren beinhaltete ^^.

Habe jetzt java noch einmal neu draufgezogen (1.6.0_18) welche änderungen muss ich nun an meinem .jnlp-file vorhnehmen ?

MFG
Destroyer2442


----------



## hansmueller (18. Feb 2010)

Das kommt darauf an, mit welcher Java-Version du dein Programm kompiliert hast.

Wenn dein Programm nur mit der Version 1.5 funktioniert, solltest du den Tag

```
<j2se version="1.5+"/>
```
so abändern:

```
<j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/>
```

Webstart zieht sich dann automatisch die JRE von Sun, die es für das Programm braucht. Dafür ist die href da. (Soll meines Wissens aber nur unter Windows automatisch funktionieren.)

Wenn dein Programm nur mit der Version 1.6 funktioniert, solltest du den Tag

```
<j2se version="1.5+"/>
```
so abändern:

```
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
```

Allerdings muß ich leider zugeben, das ich leider keine Erfahrung mit Kompatibilitätsproblemen zwischen den Java-Versionen 1.5 und 1.6 habe. Ich habe Java immer nur ab Version 1.6 benutzt.

Ich weiß aber, das es bei den Klassen speziell für WebStart-Programme (Ich meine die JNLP-Api für Drucken, Dateien öffnen und speichern, Systemeinstellungen) teilweise ein paar Änderungen gab.

Probier die Änderungen in der jnlp-Datei aus und versuche das Programm mit

```
javaws -verbose http://localhost/BankkontoTester.jnlp
```
zu starten.

Wenn es schief geht, poste bitte die komplette Fehlermeldung.

MfG
hansmueller


----------



## Destroyer2442 (3. Mrz 2010)

Hi,

Meine .jnlp sieht jetzt so aus : 

[xml]
<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<jnlp codebase="http://localhost/java/" href="http://localhost/java/BankkontoTester.jnlp" spec="1.0+"> 
    <information> 
        <title>Bankkonto Simulator</title> 
        <vendor>Lädt</vendor> 
        <homepage href="http://localhost/index.php"/> 
        <description>Simuliert einen Bankschalter</description> 
        <description kind="short">Simulator</description> 
    </information> 
    <resources> 
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="http://localhost/java/BankkontoTester.jar" download="eager" main="true"/>
    </resources> 
    <application-desc main-class="BankkontoTester"> 
    </application-desc> 
</jnlp>
[/xml]

Wenn ich diese mit Webstart ausführe wird mir zunächst folgende Meldung ausgeben : 





nach bestätigung erscheint die Fehlermeldung "Anwendung konnte nicht gestartet werden" nach einem klick auf details wurde mir folgende Ausnahme angezeigt :



> java.security.AccessControlException: access denied (java.io.FilePermission 0 read)
> at java.security.AccessControlContext.checkPermission(Unknown Source)
> at java.security.AccessController.checkPermission(Unknown Source)
> at java.lang.SecurityManager.checkPermission(Unknown Source)
> ...



Außerdem stand in der Konsole :



> Java Web Start 1.6.0_18
> Verwendung der JRE-Version 1.6.0_18-b07 Java HotSpot(TM) Client VM
> ----------------------------------------------------
> c:   Konsole löschen
> ...



Mit freundlichen Grüßen

Destroyer2442


----------



## hansmueller (5. Mrz 2010)

OK, ich glaube ich weiß jetzt, wo der Fehler liegt.

Ein Java-Programm, daß über WebStart gestartet wird, läuft standardmäßig in einer sogenannten "Sandbox" ab. D. h. das Programm darf praktisch nichts auf dem (Client-)Rechner machen, z. B. Dateien auf die Festplatte schreiben oder lesen, Systemvariablen abfragen usw.
Dies stellt sicher, daß das Programm nicht machen kann, was es will (wie z. B. die Festplatte löschen).

Siehe Java Web Start and Security (The Java™ Tutorials > Deployment > Java Web Start)

Oder für die Grundlagen: Java(TM) Web Start
Java Web Start 1.5.0 Developer Guide

Es gibt 2 Möglichkeiten die Beschränkungen der Sandbox zu beseitigen bzw. zu umgehen:

*1. Über das Packet javax.jnlp*
Es handelt sich dabei um die jar-Datei "Java/jdk1.6.0xxx/sample/jnlp/servlet/jnlp.jar". Diese mußt du in deinen Classpath eintragen. 
Dann erhälts du zusätzliche Klassen, mit denen du jeden bisher geblockten Zugriff auf den Clientrechner durch eine Erlaubnis des Anwenders aufheben kannst.
Das ganze sieht dann so aus: Wenn das Programm z. B. eine Datei auf dem Clientrechner abspeichern will, wird der Anwender zuerst gefragt, ob er diese Aktion auch wirklich zulassen will. Erst wenn der Anwender diese Abfrage bestätigt, wird das Programm fortgeführt.

Die Api für die Klassen findest du hier: JNLP API Reference 1.5
Wie du diese anwenden kannst unter JNLP API Examples

*2. Über eine Signierung der jar-Datei*
Durch das Signieren der jar-Datei und durch den *Zusatz*

```
<security>
   <all-permissions/>
</security>
```
 in der jnlp-Datei wird die Sandbox-Funktion ausgeschaltet.
Der Anwender wird beim Programmstart gefragt, ob er dem Zertifikat vertraut. Wenn er zustimmt, startet das Programm mit vollen Zugriffsrechten (zumindest denen, die auch der Anwender hat (Glaube ich zumindest)).

Link: Signing and Verifying JAR Files (The Java™ Tutorials > Deployment > Packaging Programs in JAR Files)

Für privat Leute und kleine Firmen ist die Signierung mit einem selbsterstelltem Zertifikat wohl die beste Lösung.


Ich weiß nicht welchen dieser beiden Wege du gehen willst. Wenn du den ersteren gehst, mußt du dich mit der Api auseinandersetzen und dein Programm an den enstprechenden Stellen abändern.

Wenn du dich für den zweiten Weg entscheidest kannst du dich an folgende Anleitung halten. Und vergiss nicht den Zusatz in der jnlp-Datei.


> Sämtliche Befehle werden in die Konsole (= Eingabeaufforderung) eingegeben.
> Betriebsystem Windows XP.
> 
> Wechsel in das Verzeichnis:
> ...



Bitte gib mir eine Rückmeldung, ob dies das Problem löst.

Mfg
hansmueller


----------



## Destroyer2442 (10. Mrz 2010)

Das war tatsächlich das Problem und wurde damit behoben  
Das Programm startet jetzt (endlich) fehlerfrei ^^.

Ich habe mich für den zweiten Lösungsweg entschieden und in den .jnlp file den zusatz : 
[xml]
<security>
   <all-permissions/>
</security>
[/xml]

eingefügt und habe den .jar file neu signiert (genau nach der Anleitung von hansmueller).

Danke für die Hilfe !

Mit freundlichen Grüßen 

Destroyer2442


----------

