# JNLP und GIF



## sohell (4. Feb 2011)

Hallo ich habe zu Test zwecken eine lauffähige JNLP datei welche eine einfache Klasse aufruft, die Klasse besitzt ein JFrame instanz, welche auf visible gesetzt wird. Das funktioniert: 

[XML]<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0" href="test.jnlp">
   <information>
      <title>Test</title>
      <vendor>Sun Microsystems, Inc.</vendor>
   </information>
   <resources>
      <j2se version="1.3+" href="http://java.sun.com/products/autodl/j2se"/>
      <jar href='KiwiRichClient.jar' main='true'/>
   </resources>
   <application-desc main-class='Test'/>
</jnlp>
[/XML]

Jetzt habe ich eine andere Klasse erstellt welche auch eine Frame erzeugt und diese auf Visible setzt. Sie besitzt aber zuätzlich ein Gif welche dem jFrame attribut setzt. Die Klasse sieht wie folgt aus: 
*JnlpKlasse*

```
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class JnlpKlasse {
	// erstelle eine jFrame Instanz  
	static JFrame frame = new JFrame();

	public static void main(String[] args) {
		frame.setSize(100,100); // setze Größe des Frames 
		Image image = new ImageIcon("logo.gif").getImage(); // setze logo des Frames. 
		// Das Bild befindet sich im obersten Pfad des Java Projektes (in Eclipse/Package Explorer)  
		frame.setIconImage(image); // setze Image eigenschaft des Frames
		frame.setVisible(true);  // zeige das Frame --> alles Wunderbar es wird richtig angezeigt 
	}
}
```

Die obere Klasse besitzt eine eigene JNLP Datei *"test.jlnp" *die folgendermaßen aussieht: 

[XML]<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0" href="test.jnlp">
   <information>
      <title>Test</title>
      <vendor>Sun Microsystems, Inc.</vendor>
   </information>
   <resources>
      <j2se version="1.3+" href="http://java.sun.com/products/autodl/j2se"/>
      <jar href='Klasse.jar' main='true'/>
      <gif href='resource.jar'/>
      <gif href='logo.gif'/>
   </resources>
   <application-desc main-class='JnlpKlasse'/>
</jnlp>
[/XML]

Ich habe einmal die Klasse selbst als JAR exportiert und die Bilder auch. Es gibt eine JNLP Datei namens test.jlnp. Folgende Dateien befinden sich in dem Ordner. 







Wenn ich die test.jlnp ausführe (der Inhalt ist die test.jlnp) dann erhalte ich die* Fehlermeldung*: 






folgendes habe ich bereits in der *test.jlnp* probiert: 
[XML]
<ref href='resource.jar'/>
<ref href='logo.gif'/>

<ref href='resource.jar' main='false'/>
<ref href='logo.gif' main='false'/>

<ref href='resource.jar' main='true'/>
<ref href='logo.gif' main='true'/>
[/XML]
Aber alles Ohne andere Fehlermeldung. Ich erhalte immer dieselbe Fehlermeldung! 
Ich hoffe ihr könnt mir helfen.:noe::bahnhof:


----------



## hansmueller (4. Feb 2011)

Hallo,

was steht den bei der Fehlermeldung im Reiter "Ausnahme"?

Probier es mal so: Pack das gif in eine Jar und statt dem "logo.gif" schreibst du diese "JarmitLogo.jar" in die JNLP.

MfG
hansmueller


----------



## sohell (4. Feb 2011)

Hallo die Variante hatte ich auch schon mal probiert. Aber danke dir trotzdem. :noe:
ich habe folgende Fehlermeldung: 



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



So sieht meine JNLP aus: 
[XML]<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0" href="test2.jnlp">
   <information>
      <title>Test</title>
      <vendor>Sun Microsystems, Inc.</vendor>
   </information>
   <resources>
      <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
      <jar href='Klasse2.jar' main='true'/>
	<jar href='resource.jar' main='false'/>
   </resources>
   <application-desc main-class='JnlpKlasse'/>
</jnlp>
[/XML]

Das gif habe ich in eine jar hineingepackt wie du gesagt hast. die befindet sich in resources.jar. Die war aber auch schon vorhanden und diese lösung habe ich auch schon probiert gehabt. 

die jar zeile in resources hab ich auch schon folgendermaßen umgewandelt und immerwieder probiert: 
[XML]<ref href='resource.jar'/>
<ref href='logo.gif'/>

<ref href='resource.jar' main='false'/>
<ref href='logo.gif' main='false'/>

<ref href='resource.jar' main='true'/>
<ref href='logo.gif' main='true'/>[/XML]


----------



## hansmueller (5. Feb 2011)

Hallo,

es könnte daran liegt, wie du das Bild im Programm lädst.

Probiere es mal so:

```
URL urlbild = getClass().getClassLoader().getResource("logo.gif");
Image image = JnlpKlasse.getToolkit().getImage(urlbild);
				
MediaTracker mt = new MediaTracker(JnlpKlasse);
mt.addImage(image, 0);
```
(Ist jetzt mal nur so schnell geschrieben, den MediaTracker kannst du auch fürs testen weglassen.)

Wenn man Jars verwendet, muß man auf eine bestimmte Art und Weise auf z. B. Bilder oder andere Dateien zugreifen, die sich innerhalb der Jars befinden.

Evtl. hilft es dir auch, wenn du dich über die Themen "Signieren von Jars" und "Sandbox bei WebStart" informierst.

MfG
hansmueller


----------



## hansmueller (5. Feb 2011)

Hallo,

habe noch folgende Links für dich:
http://www.java-forum.org/deployment/94590-java-webstart-startet-jar-file.html#post617654
http://www.java-forum.org/deployment/101610-jnlp-accesscontrolexception.html
JNLP API (The Java™ Tutorials > Deployment > Doing More With Rich Internet Applications)
JNLP API Reference 1.7.0

MfG
hansmueller


----------



## Siassei (5. Feb 2011)

Hallo,

eine java.security.AccessControlException deutet auf das Fehlen von Rechten hin. Wie ich sehe hast du keine Rechte in deiner JNLP vergeben. Setze doch mal deine Rechte auf

```
<security> 
      <all-permissions/> 
    </security>
```


----------



## sohell (8. Feb 2011)

hallo danke euch für die nützliche Hilfe ich habe nun die JNLP datei zum laufen bekommen. 

Ich habe nun folgende JNLP Datei *test2.jnlp*: 

[XML]<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0" href="test2.jnlp">
   <information>
      <title>Test</title>
      <vendor>Sun Microsystems, Inc.</vendor>
   </information>
   <resources>
      <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
      	<jar href='kinderGeldAntrag.jar' main='true'/>
	<jar href='resource.jar' main='false'/>
	<jar href='uif_lite-2.1.4.jar' main='false'/>
	<jar href="jgoodies-forms-1.4.0.jar" main="true" />
	<jar href="uif_lite-2.1.4.jar" main="true" />
	<jar href="jgoodies-looks-2.4.0.jar" main="true" />
	<jar href="jgoodies-common-1.1.1.jar" main="true" />
   </resources>
    <security> 
      <all-permissions/> 
    </security>
   <application-desc main-class='MainClass'/>
</jnlp>[/XML]

In der JAR Datei kinderGeldAntrag.jar befindet sich eigentlich ja schon die jGoodies Referenzen aber ohne die Folge-Zeilen im *test2.jlnp*, welche uif_lite-2.1.4 und die anderen jgoodies jars beinhaltet, geht die Anwendung nicht. Auch die Gif's musste ich in den JLNP Ordner hinzufügen. Der Ordner sieht nun wie folgt aus: 






Nachdem ich die fehlenden jgoodies jars auch in den Ordner gepackt habe und diese signiert hab hat die Anwendung durch doppelklick auf die *test2.jnlp* funktioniert. 

Da es noch zum Thema passt, aber noch nicht wirklich gelöst ist, würde ich gerne folgende Erweiterung realisieren: 

Ich habe eine HTML datei *"test.html"* erstellt mit folgendem Inhalt: 


```
<html>
  <head><title>First Java Applet</title></head>
<body>
  <h2>My first Java Applet says:</h2>
	<A href="test2.jnlp">Open Kindergeldantrag via Java Web Start</A>
</body>
</html>
```

Durch diesen Link in der HTML lade ich die *test2.jnlp* herunter. Aber diese kann ja nicht ohne die Anderen JARS und Bilder starten. Was mache ich falsch? 

Also nochmal Danke für die Hilfestellungen. :toll:


----------



## sohell (8. Feb 2011)

Ich habe nun 2 HTML Dateien die im Internet Explorer zwar funktionieren aber ohne Bilder. Also Google Chrome Browser ladet die JLNP Datei herunter. Wohingegen Internet Explorer direkt den Java Web Start startet und es funktioniert. Die Bilder werden wie gesagt im Internet Explorer noch nicht angezeigt.


```
<html>
  <head><title>First Java Applet</title></head>
<body>
    ....
    <script src="http://www.java.com/js/deployJava.js"></script>
    <script>
        // using JavaScript to get location of JNLP file relative to HTML page
        var dir = location.href.substring(0, location.href.lastIndexOf('/')+1);
        var url = dir + "test2.jnlp";
        deployJava.createWebStartLaunchButton(url, '1.6.0');
    </script>
    ....
</body>
</html>
```


----------



## hansmueller (8. Feb 2011)

sohell hat gesagt.:
			
		

> In der JAR Datei kinderGeldAntrag.jar befindet sich eigentlich ja schon die jGoodies Referenzen aber ohne die Folge-Zeilen im test2.jlnp, welche uif_lite-2.1.4 und die anderen jgoodies jars beinhaltet, geht die Anwendung nicht. Auch die Gif's musste ich in den JLNP Ordner hinzufügen.


Ich glaube, dir ist noch nicht so ganz klar, wie WebStart eigendlich funktioniert.
Dein Programm wird nicht auf dem Server ausgeführt, sondern nur auf dem Client (Anwenderrechner). Dafür muß das komplette Programm auf den Rechner des Anwenders kopiert werden. D. h. alle Jars, die das Programm evtl. benötigt. Daher sind auch die entsprechenden Einträge in den Resources der JNLP-Datei notwendig. WebStart muß ja schließlich wissen, welche Dateien heruntergeladen werden müssen.
Wenn du die Dateien einfach in den Ordner für dein Programm auf dem Server legst, weiß WebStart auf dem Anwenderrechner natürlich nichts von diesen und wird diese auch nicht herunterladen. 

WebStart ist eigendlich nur für die Verteilung und die Aktualisierung zuständig.

MfG
hansmueller


----------



## hansmueller (9. Feb 2011)

Ach ja... du mußt die Bilder in eine Jar packen.
Soweit ich weiß, akzeptiert WebStart als Resourcen nur Jars.

Und wenn bei einem Browser die JNLP-Datei nur heruntergeladen aber nicht gestartet wird, dann mußt du im Browser die Programmverknüpfungen richtig einstellen (JNLP --> javaws.exe bei Windows). 

MfG
hansmueller


----------



## sohell (9. Feb 2011)

hallo ich habe die bilder in einer resource.jar gepackt und in der JNLP datei diese angegeben wie folgt: 

[XML]<jar href='resource.jar' main='false'/>[/XML]

und trotzdem werden die bilder nicht angezeigt. in dem resource.jar befinden sich nur die bilder sonst nichts. 

Danke:toll:


----------



## hansmueller (9. Feb 2011)

Hast du deine BildinsProgrammlademethode schon so angepaßt, wie ich es hier http://www.java-forum.org/deployment/113097-jnlp-gif.html#post727445 beschrieben habe?

Laß dir die Url mal auf die Konsole ausgeben und teste das Bild auf null.
Vielleicht ist nur der Pfad falsch. Dann könntest du es statt mit "logo.gif" mit "resource/logo.gif" probieren.

MfG
hansmueller


----------

