# Problem beim deployen eines Applets



## Guest (16. Mai 2008)

Ich habe ein kleines JApplet welches einfach nur ein Image anzeigen soll. Im Eclipse Debugger läuft alles perfekt. Jetzt habe ich ein Jar erstellt, dieses signiert und auf eine HTML Seite eingebunden. Das Applet wird auch geladen. In der Sun Java Konsole gibt es keine Fehlermeldungen. Die Hintergrundfarbe wird angezeigt, aber ich sehe kein Bild.

Hat jemand eine Idee?


```
public void paint(Graphics g){
		Container contentPane=getContentPane();
		Color c = new Color(200,120,80);
		contentPane.setBackground(c);
		JLabel jl=new JLabel("");
		if (isOK){
			Icon iconOK = new ImageIcon(getClass().getResource("/resources/images/ok.png"));
			jl.setIcon(iconOK);
	    }else{
	    	Icon iconNOK = new ImageIcon(getClass().getResource("/resources/images/nok.png"));
	    	jl.setIcon(iconNOK);
	    }
		contentPane.add(jl);
	}
```


----------



## Wildcard (17. Mai 2008)

Hast du auch überprüft ob die Resourcen im jar enthalten sind?


----------



## L-ectron-X (17. Mai 2008)

Das, was du hier in die paint()-Methode geschrieben hast, gehört eigentlich in die init()-Methode.


----------



## Gast (18. Mai 2008)

Danke,

habe es mal in die Ini gepackt. Leider kein Erfolg. Die Anzeigefläche bleibt jetzt sogar weiß. 

Die Images sind im Jar. Ich habe dieses sogar entpackt und nachgesehen ob die Ordner passen. Hier ist alles OK. Zudem habe ich mal ein System.out.println(true bzw. false) eingebaut. In der Java Console wird mir dann auch true bzw. false ausgegeben. Somit wird der Code ausgeführt. Nur kann ich nichts sehen. 

Was mir auch aufgefallen ist. Wenn ich über die Stelle wo das Applet ist ein Fenster aufklappe. Z.B. den Explorer und dann das Fenster schließe wird das Applet nicht neu gezeichnet. Ich sehe dann immernoch reste des Explorere Fensters im Bereich des Applets.

Noch irgendwelche Ideen?


----------



## L-ectron-X (18. Mai 2008)

Klar. Lade die Bilder richtig! Bilder werden über die Applet eigene Methode getImage() geladen.
Einfaches Beispiel, wenn sich die Bilder in der gleichen Jar-Datei befinden:


```
import javax.swing.*;
import java.awt.*; //wenn du ein Image als Variable anlegen willst

public class PictureApplet extends JApplet {
    public void init() {
        JLabel label = new JLabel();
        label.setIcon(new ImageIcon(getImage(getClass().getResource("bild.jpg"))));
        add(label);
    } 
}
```


----------



## Gast (18. Mai 2008)

Danke, für den Tipp.

Will das gleich mal testen. Ich packe zusätzlich (später im Code) ein JPanel auf das Applet. Dieses JPanel nutze ich auch in einem "normalen" Java-Programm. Muss ich mir dann selber eine Art ImageLoader basteln der beim normalen Programm so lädt und beim Applet wie in deinem Post?

Kann ich dann im Panel irgendwo abfrage ob dieses auf ein Applet oder einen Frame gesetzt wurde?


----------



## Guest (18. Mai 2008)

Habs eben schnell getestet. Klappt jetzt mit dem Bild perfekt. Leider wird mir nicht die korrekte Hintergrundfarbe angezeigt. Mache ich hier auch noch was falsch?


```
import javax.swing.*; 
import java.awt.*; //wenn du ein Image als Variable anlegen willst 

public class PictureApplet extends JApplet { 
    public void init() { 
        setBackground(new Color(255,0,0));
        JLabel label = new JLabel(); 
        label.setIcon(new ImageIcon(getImage(getClass().getResource("bild.jpg")))); 
        add(label); 

    } 
}
```

Müsste eigentlich rot ergeben. Der Hintergrund ist aber eher leicht grau bis weiß. 
Und die Frage aus dem letzten Post bzgl. ImagerLoader ist noch offen.

Wäre nett wenn mir hier jemand den richtigen Weg zeigen könnte.


----------



## L-ectron-X (18. Mai 2008)

Gast hat gesagt.:
			
		

> Muss ich mir dann selber eine Art ImageLoader basteln der beim normalen Programm so lädt und beim Applet wie in deinem Post?


Ja, du musst auf jeden Fall das Laden der Bilder für den Fall, dass eine Applikation und den Fall dass ein Applet gestartet wurde, schreiben.



			
				Gast hat gesagt.:
			
		

> Kann ich dann im Panel irgendwo abfrage ob dieses auf ein Applet oder einen Frame gesetzt wurde?


Warum so umständlich? Wenn du ein Applet lädst, wird immer eine init()-Methode ausgeführt, bei Applikationen wird immer eine main()-Methode ausgeführt. Damit kannst du wunderbar den Typ unterscheiden und die entsprechende Methode in einer Klasse aufrufen.
Das Panel braucht also nicht wissen, ob es in ein Applet oder in eine Applikation geladen wurde.


----------



## L-ectron-X (18. Mai 2008)

Den Hintergrund eines JApplets färbst du, in dem du den enthaltenen Container zurücklieferst und darauf die Farbwerte setzt.


```
getContentPane().setBackground(Color.RED);
```


----------

