# Trotz FAQ, Forum und Google läuft Applet im Firefox nicht



## sliwalker (11. Apr 2008)

Hi,

vorneweg.
Ich habe die vier Einträge in der FAQ gelesen, mich durch die ersten fünf Seiten des entsprechenden Unterforums gelesen und einige Applet Tutorials(gallileo, java in 21 tagen...) gelesen und natürlich selbst alles ausprobiert was mir eingefallen ist.

Aber mein erstes besch*$%!& Applet will nicht im Firefox laufen.
Hab noch nie solche Startschwierigkeiten gehabt.


Starte ich es mit eclipse als JApplet, dann geht es.
Aber es läuft weder lokal aufgerufen, noch auf dem Server.
Es ist nur ein HelloWorld mit Parameter, also Signierung ist nicht zwingend.

Server-Dateistruktur:

```
-new
  +codebase
    +applets
       HelloWorld.class
     Html.php
index.php
```


Die Datei, die die Ausgabe produziert liegt auf Höhe von "codebase".
Hier die PHP-Zeile die die HTML produziert.

```
$html=	"<applet code='applets.HelloWorld.class' width='250' height='400' align='center'> 
	     <param name='text' value='Hallo Welt!'> 
	     </applet>";
return ($html);
```


Das ist der Quellcode des Applets.
Den habe ich mit eclipse ausgeführt und dann eine .class Datei erhalten, die in BINARY auf meinen Server transferiert habe.

```
package applets;

import java.applet.Applet;
import java.awt.Graphics;

public class HelloWorld extends Applet {
	
	  /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String strText; 
	  
	  @Override 
	  public void init() 
	  { 
	    this.strText = getParameter("text" ); 
	  } 
	  
	  @Override
	  public void destroy() {
		  this.strText = null;
	  }
	  
	  @Override
	  public void start() {
		  
	  }
	  
	  @Override
	  public void stop() {
		  
	  }
	  
	  @Override 
	  public void paint( Graphics g ) 
	  { 
	    g.drawString(this.strText, 50, 50);
	  } 

}
```


So...
...ich habe schon ausprobiert:

+ Applet gegen JApplet ausgetauscht.
+ Komplette URL angegeben http://....HelloWorld.class
+ das applets bei applets.HelloWorld.class weggeglassen
+ codebase Tag mit Wert "applets" benutzt
(Mit diesen Änderungen in allen mir eingefallenen Varianten)
+ die .class auf Höhe von "new" gelegt und eine index.html auf gleicher Höhe die das Applet aufruft


Aber nix! Keine Besserung.
kann doch nicht so schwer sein ein Applet ans Laufen zu bekommen  

Hier die aktuelle Fehlermeldung bei Konfiguration:
+ .class liegt in "applets"
+ kein codebase-Tag
+ aufruf mit applets.HelloWorld.class

Also so wie ich mir vorstelle wie es sein muss.



> Laden: Klasse applets.HelloWorld.class nicht gefunden
> java.lang.ClassNotFoundException: applets.HelloWorld.class
> at sun.applet.AppletClassLoader.findClass(Unknown Source)
> at java.lang.ClassLoader.loadClass(Unknown Source)
> ...



Ich weiß nicht mehr weiter.
Würd mich freuen wenn ihr mir helfen könntet.

greetz
SLi


----------



## L-ectron-X (11. Apr 2008)

Also dein Applet-Code ist in Ordnung, den können wir hier ausklammern.
Schauen wir uns mal die PHP/HTML-Datei an: Meines Wissens werden die Attribute entweder in Anführungszeichen gesetzt, oder komplett ohne. Die Hochkommata (Apostroph) könnten eventuell Probleme bereiten.

Dein Applet deklariert ein Package, also muss es auch in diesem Verzeichnis liegen. Der Aufruf in der HTML-Datei muss dann auch mit der Angabe des Packages gemacht werden.
Also _code="applets.HelloWorld"_ ist in Ordnung. Das _.class_ kann, muss aber nicht mit angegeben werden.


----------



## sliwalker (12. Apr 2008)

Hi,

danke für die späte Antwort.
Hab jetzt erst was anderes programmiert.
HTML sieht nun nach Deinen Tipps so aus:

```
$html=	'<applet code="applets.HelloWorld" width=250 height=400> 
					<param name=text value=Hallo Welt!> 
					</applet>';
			return ($html);
```

Die .class liegt im Ordner "applets", der sich auf Höhe von der HTML-Datei befindet.

Geht immer noch nicht. 


```
Laden: Klasse applets.HelloWorld nicht gefunden
java.lang.ClassNotFoundException: applets.HelloWorld
	at sun.applet.AppletClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.applet.AppletClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.applet.AppletClassLoader.loadCode(Unknown Source)
	at sun.applet.AppletPanel.createApplet(Unknown Source)
	at sun.plugin.AppletViewer.createApplet(Unknown Source)
	at sun.applet.AppletPanel.runLoader(Unknown Source)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
```

greetz
SLi


----------



## L-ectron-X (12. Apr 2008)

Ich kann mir vorstellen, dass du die Anführungszeichen maskieren musst.
Bevor aber mit PHP experiementierst, solltest du das ganze erst mal im HTML testen.



			
				sliwalker hat gesagt.:
			
		

> Die .class liegt im Ordner "applets", der sich auf Höhe von der HTML-Datei befindet.


Liegt die HTML-Datei mit im Verzeichnis oder außerhalb vom applets-Verzeichnis?


----------



## sliwalker (12. Apr 2008)

Hoi,

hab sie auch nochmal maskiert, obwohl es nicht sein kann.
Ich vermute das Problem liegt nich beim PHP Code, dass habe ich schon zu oft geschrieben, als dass es jetzt nicht funktionieren sollte.

Dein zweiter Hinweis schon eher.
Die .class liegt im "applets" Ordner(wegen packages). Die Html.php, wo der String ausgegeben wird, liegt im Ordner "codebase" in dem sich auch "applets" befindet. Also "nein", die liegen nicht im selben Verzeichnis. 
Die Datei, die die Funktion in der Html.php ausführt, liegt im Vauch im Verzeichnis "codebase". Die widerrum wird von der index.php aufgerufen, welche im Verzeichnis "new" liegt.
Ist einfach eine neue Version, die eine Ebene tiefer als root liegt und von da ab halt die Ordnerstruktur der neuen Seite.

Kann mir vorstellen, dass er sie nicht findet. Aber hab auch schon mit codebase rumprobiert (Wert "applets") hat auch nicht geholfen.


Natürlich habe ich mir auch mal den HTML Code in eine Datei geschrieben und die ins Verzeichnis von der .class gelegt und dann in den Browser gezogen, aber da gibst dasselbe Problem. Nur imn eclipse gehts.
Mitm Appletviewer und der eben beschriebenen Variante hats auch nicht geklappt.

Danke für die Hilfe.

greetz
SLi


----------



## L-ectron-X (12. Apr 2008)

Es funktioniert nur so:
Dein Applet deklariert ein Package _applets_, also muss die class-Datei im Verzeichnis _applets_ liegen.
Die HTML-Datei muss oberhalb von _applets_, d.h. in deinem Verzeichnis _codebase_ liegen.
Der Applet-Tag in deiner HTML-Datei muss für deinen Code folgendermaßen aussehen:

```
<applet code="applets.HelloWorld" width="400" height="300">
<param name="text" value="Hello World!">
</applet>
```

Das codebase-Attribut wird benötigt, wenn deine HTML-Datei den Applet-Code in einem anderen Verzeichnis oder auf einem anderen Rechner unabhängig von den deklarierten Packages suchen/laden soll.

Wenn also deine HTML-Datei nicht im Verzeichnis _codebase_ liegt, sondern in _new_, muss dein Applet-Tag so aussehen:

```
<applet codebase="./codebase" code="applets.HelloWorld" width="400" height="300"> 
<param name="text" value="Hello World!"> 
</applet>
```


----------



## sliwalker (12. Apr 2008)

Hi L-ectron-X,

unglaublich. Das war die Lösung.
Deine zweite Version funktioniert 

Hab vielen Dank für Deine aufwändige Hilfe 

greetz
SLi


----------

