# JApplet läuft in Eclipse, aber nicht in den Browsern



## MichiM (1. Feb 2006)

Hi,

folgender Code läuft einwandfrei in Eclipse, aber im Firefox wie IE krieg ich bloß eine leere, graue Fläche und unten steht jeweils "Applet StromkreisApplet started".



StromkreisApplet.java:


```
import javax.swing.*; 
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
	
public class StromkreisApplet extends JApplet implements ActionListener
{
  Image MyImage;
  Canvas Grafik;
  
  JButton	StromstaerkeButton,
  			SpannungButton;
  
  public void actionPerformed ( ActionEvent e )
  {
	  if ( e.getSource () == StromstaerkeButton)
	  {
		  
	  }
	  
  }

  public void init()
  {
   
	  try
	   {

		  	setSize ( new Dimension ( 600, 600));
		  	Container contentPane = getContentPane(); 
		    //contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
		    
		    JPanel panel = new JPanel();
		    
		  	//__________________________________________________________

		    JPanel EingabePanel1 = new JPanel();
		    EingabePanel1.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
		    
		    Label StromstaerkeLabel = new Label ( "Stromstärke I:" );
		    EingabePanel1.add ( StromstaerkeLabel );
		  	TextField StromstaerkeEingabe = new TextField ( 3 );
		  	EingabePanel1.add ( StromstaerkeEingabe );
		  	StromstaerkeButton = new JButton ("setze Stromstärke");
		  	EingabePanel1.add ( StromstaerkeButton );

		  	//__________________________________________________________

		    JPanel EingabePanel2 = new JPanel();
		    EingabePanel2.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
		  	
		  	Label SpannungLabel = new Label ( "Spannung U:" );
		  	EingabePanel2.add ( SpannungLabel );
		  	TextField SpannungEingabe = new TextField ( 3 );
		  	EingabePanel2.add ( SpannungEingabe );
		  	SpannungButton = new JButton ("setze Spannung");
		  	EingabePanel2.add ( SpannungButton );

		  	//__________________________________________________________
		  	
		  	JPanel EingabePanel = new JPanel();

		  	EingabePanel.setLayout ( new BoxLayout ( EingabePanel,
						BoxLayout.Y_AXIS ) );
 	
		  	EingabePanel.add(EingabePanel1);
		  	EingabePanel.add(EingabePanel2);
		  	
		
		    JSplitPane splitPane = new JSplitPane(
		    	     JSplitPane.VERTICAL_SPLIT, 
		    	     new JLabel ( new ImageIcon ( "leitergrafik.JPG" ) ),
		    	     		EingabePanel );
		    	  splitPane.setOneTouchExpandable(true);
		   panel.add(splitPane);
		   contentPane.add (panel);
		   
		    
		    this.setVisible ( true );
	   }
	   catch ( Exception e )
	   {
		   	System.out.println ( e );
	   }
  }
  
}
```

stromkreis.html:

```
<HTML>
<BODY>
<APPLET CODE=StromkreisApplet.class archive="stromkreis.jar" WIDTH=800 HEIGHT=800>
</APPLET>
</BODY>
</HTML>
```

Verwende ich evtl. irgendwelche Swing-Elemente, die in einem JApplet nicht vorkommen dürfen?

Gruß Michi


----------



## Beni (2. Feb 2006)

Du kannst alles von Swing benutzen, kein Problem.

Mehr Sorgen macht mir dieser Befehl: "new ImageIcon("leitergrafik.JPG" )". Denn da willst du auf die Festplatte zugreiffen, etwas was ein Applet normalerweise nicht tun darf. Guck doch mal in der Java-Konsole deines IEs, obs da eine SecurityException gab.

Am besten packst du Bilder gleich in das JAR-File des Programmes und liest über "Class#getRessource".


----------



## MichiM (2. Feb 2006)

Hi zusammen,

hab die Grafik ins JAR aufgenommen, aber dennoch kein Erfolg...
Woran kanns sonst liegen?

Gibts noch eine Möglichkeit, einen ausführlicheren Status als den zu bekommen, den der Browser in der Statuszeile anzeigt?

Gruß Michi


----------



## MichiM (2. Feb 2006)

Und wieder mal wars ein Cache-Problem... Nun hab ich zwar schon alles in ein JAR gepackt und dieses eingebunden (s. HTML oben), aber dennoch wird noch zu viel gecachet. Was tun?


----------



## L-ectron-X (2. Feb 2006)

MichiM hat gesagt.:
			
		

> Gibts noch eine Möglichkeit, einen ausführlicheren Status als den zu bekommen, den der Browser in der Statuszeile anzeigt?



Die Java-Console?


----------



## MichiM (3. Feb 2006)

Hi, während es im Eclipse und lokal in den Browsern nun zwar einwandfrei läuft, bekomme ich aufm Webserver (wie oben schon vermutet) folgende Meldung in der Java Console:



> java.security.AccessControlException: access denied (java.io.FilePermission leitergrafik.JPG read)



Die Datei befindet sich wohlgemerkt auch im JAR, scheint aber immer noch nicht zu reichen, damit sie ins Applet geladen werden kann. Wie bringt man es nun noch hin, dass die Grafik extern in einer Datei gespeichert und "dennoch" ins Applet geladen werden kann? Komisch vor allem, dass es lokal ja schon läuft - sollten die Sicherheitsprinzipien da andere sein?  ???:L  :lol:

Gruß Michi


----------



## Beni (3. Feb 2006)

Versuchs mit:

```
URL url = KlasseDeinesProgis.class.getRessource( "/verzeichnis/image.jpg" );
```
Und dann über "ImageIO.read" direkt mit der URL das Bild laden.


----------



## MichiM (4. Feb 2006)

Hi Beni,

funktioniert, danke. 


Für die Nachwelt:

Die Methode heißt (kleine Rechtschreib-Korrektur):

_.class.getResource_

und wird in

_javax.imageio.ImageIO;_

gefunden.

Kurzer Beispielcode:


```
// hier natuerlich individuelle Anpassungen vornehmen ;)   :
URL url = StromkreisApplet.class.getResource( "leitergrafik.JPG" ); 
			  	
			  	JSplitPane splitPane = new JSplitPane
			  	(
			    	     JSplitPane.VERTICAL_SPLIT,
			    	     new JLabel ( new ImageIcon ( ImageIO.read ( url ) ) ),
			    	     EingabePanel
		        );
```

Gruß Michi


----------

