# Applet als Jar-Datei in HTML einbinden



## Kanitrino (30. Jan 2012)

(Ich habe diesen Beitrag in einen neuen Thread kopiert, da ich ihn an anderer Stelle aus Versehen in einen bereits erledigten und nicht wieder zu öffnenden Thread geschrieben habe)

Hallo allerseits,

Leider ist mir beim Lesen dieser ausführlichen Tipps keine Erleuchtung für mein eigenes Problem gekommen.

Ich habe auf meiner Webseite "www.seitenname.de" erfolgreich ein Applet als jar-File in eine HTML-Seite eingebunden.
Dazu habe ich alle Klassen des Programms in eine (!) Datei geschrieben und mit WinZIP einen jar-File draus gemacht. Nun steht er unter der Bezeichnung "Applet1.jar" im Verzeichnis "jarDateien" und enthält die Klassen "Applet1.class", "Applet1$1.class" .... "Applet1$5.class".

Der HTML-Code sieht so aus :

```
<applet code="Applet1.class"
archive="http://www.seitenname.de/jarDateien/Applet1.jar" align="middle"
height="520" width="750">
```

Das funktioniert.

Inzwischen arbeite ich mit Eclipse und dort mit Packages, die ich auf den Rat weiser Leute mit z. B. dem Namen "de.seitenname.paketname1" belegt habe. Darin steht nun mein Applet "Applet2" sowie weitere Klassen. Andere Klassen stehen im Package "de.seitenname.paketname2".

Mit Eclipse brauchte ich jetzt nur noch File->Export->jar file zu klicken, alle benötigten Klassen ankreuzen und das Gesamtwerk unter dem Namen "Datei" im o. g. Verzeichnis "jarDateien" abzuspeichern.

Nun gelingt es mir aber nicht mehr, mein Applet richtig zu adressieren. Ich bekomme immer eine Fehlermeldung, dass es nicht gefunden wird.

Wenn ich jetzt den o. g. Code auf den zweiten Fall zu übertragen versuche, irritiert mich zunächst, dass "Datei" ein Ordner und nicht ein jar-File ist. In der ganzen Hierarchie (die ich zur Orientierung mit einem deRARer entpackt habe) findet sich überhaupt keine .jar-Bezeichnung. Dort lautet die Hierarchie vielmehr :

jarDateien
Datei
de
seitenname
paketname1
Applet2.class

Ich habe also den HTML-Code so formuliert :

```
<applet code="paketname1.Applet2.class"
archive="http://www.seitenname.de/jarDateien/Datei" align="middle"
height="550" width="930"> <param name="sprache" value="DE">
```

Das funktioniert nicht.

Ich habe jetzt alle möglichen Varianten durchprobiert aber nix gefunden, was funktionierte.
Der "paketname1" muss wohl mit Punkt vor dem Dateinamen stehen, oder ? Aber wie ist das mit "de" und "seitenname" ? Stehen die davor ? Werden sie mit Punkt oder / von paketname1 getrennt ?

Wer kann mir einen Tipp geben ?


----------



## L-ectron-X (31. Jan 2012)

_Datei_ ist vermutlich deine Jar-Datei. Benenne die mal um in Applet2.jar und schau mal mit einem Packprogramm hinein, ob und was da was drin ist.

Wenn es deine Jar-Datei ist, probiere mal:

```
<applet codebase="http://www.seitenname.de/jarDateien/Datei"
  archive="Applet2.jar"
  code="paketname1.Applet2.class" 
  align="middle"
  height="550" width="930">
  <param name="sprache" value="DE">
</applet>
```

Ansonsten mal den FAQ-Beitrag lesen:
http://www.java-forum.org/applets/114668-java-applet-webseite-einbinden.html


----------



## Kanitrino (1. Feb 2012)

Herzlichen Dank, L-ectron-X, jetzt wird offenbar*) die Adresse gefunden.

Das heisst, obwohl der gesamt-jar-File in meinem DeRARer als gelber Ordner mit verschiedenen Klassen (*.class) drin erscheint, ist er bei der Adressierung als *.jar-File zu betrachten.

*) genauer gesagt erscheint jetzt die Java-Tasse und -uhr, aber die läuft endlos. Ich vermute also, dass das Applet gefunden wurde, dass jedoch noch ein weiteres Problem vorliegt, das nichts mit der Adressierung in HTML zu tun hat. Damit werde ich mich separat rumschlagen müssen. 

Ist diese Vermutung richtig ?


----------



## L-ectron-X (1. Feb 2012)

Kann ich nicht sagen. Ebenso gut kann es sich noch um einen Fehler im Programm handeln.
Die Java-Konsole gibt die Fehlermeldungen aus, wenn sich noch ein Fehler im Programm befindet.
Ansonsten solltest du dich unbedingt an die Konventionen zum Einbinden von Applet halten und dich nicht auf Vermutungen verlassen.


----------



## Kanitrino (1. Feb 2012)

L-ectron-X hat gesagt.:


> Ansonsten solltest du dich unbedingt an die Konventionen zum Einbinden von Applet halten


Darum ringe ich gerade.

Die Situation ist jetzt :
1. Ich habe ein Applet, das in Eclipse funktioniert.
2. Ich wandele es in eine jar-Datei um und binde diese in eine HTML-Seite ein
Es funktioniert nicht.
Ich erhalte eine Fehlermeldung dass die Applet.class nicht gefunden wird
3. Offensichtlich war die Adressierung in der HTML-Datei fehlerhaft. Die kann ich dank freundlicher Unterstützung in diesem Foum verbessern.
4. Das Programm läuft immer noch nicht. Das Java-Icon erscheint, die Datei wurde also offenbar gefunden (oder ?!), aber es passiert nichts, nur das Rad um das Java-Icon dreht sich.

Nun frage ich mich : 
Was bedeutet es, wenn das Java-Rad sich endlos dreht, aber das Applet nicht startet aber auch keine Fehlermeldung kommt ?
Ist das Problem mit der HTML-Datei gelöst und ich muss mich nun nach Fehlern im Java_Applet oder in der jar-Datei suchen, oder geht es immer noch um die HTML-Datei ?

Ich habe eigentlich eine Applikation geschrieben und sie mit diesem Programm zum Applet umfunktioniert : 

```
import javax.swing.JApplet;

public class LeguanApplet1 extends JApplet
{
	private static final long serialVersionUID = 1L;
	LeguanSimulation1 applik;

	public void init()
	{
		applik = new LeguanSimulation1();
	}

	public void start()
	{
		applik.setVisible(true);
	}
	 
	public void stop()
	{
		applik.setVisible(false);
	}
}
```

Ob daran was falsch ist ?


----------



## L-ectron-X (1. Feb 2012)

Nein, das Applet ist in Ordnung. Dass sich das Java-Symbol ewig ohne Fehlermeldung dreht, ist untypisch.
Was genau macht deine Applikation? Kannst du das Ganze mal zum Testen zur Verfügung stellen?


----------



## Kanitrino (1. Feb 2012)

Ich habe die einzelnen Klassen des Programms aus Eclipse auf eine Seite kopiert (und das "public" aus allen bis auf die "main" Klasse gelöscht). Es ist ziemlich lang und das Forum sagt : 
_Der Text, den Sie eingegeben haben, besteht aus 30499 Zeichen und ist damit zu lang. Bitte kürzen Sie den Text auf die maximale Länge von 25000 Zeichen._
Ich werde ausnahmsweise einen Teil des Programms in einen nachfolgenden Beitrag kopieren. Jemand (L-ectron-X ?) kann es ja anschließend alles löschen.

In der aktuellen Form ist das Programm eine Applikation mit dem Namen "LeguanSimulation1". 

Um es in ein Applet umzuwandeln, muss man nur die /*...*/ vor der ersten Klasse zu enfernen (und das "public" vor der zweiten). Die dazugehörige HTML-Datei steht ganz unten.

Wenn ich diese Seite wieder in Eclipse hineinkopiere, läuft 's. Wenn ich sie jedoch aus TextPad heraus starte, kommt die *Fehlermeldung* "Exception in thread "main" java.lang.NoClassDefFoundError" 

Auch der Start als Applet geht nicht aus der html-Datei heraus.

Dort wird erklärt, worum es in dem Programm geht : Hyperzyklus
Dort, in meine HP, soll das Programm eingebunden werden (sofern ich das irgendwann mal schaffe).

Hier ist das Java-Programm und die HTML-Datei für's Applet

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>Leguan</title>
  <meta name="author" content="Klaus Wernicke">
  <meta name="description" content="Das Paarungsverhalten der Leguane">
</head>

<body>
	<applet code = "LeguanApplet1.class"
 		align="middle"
 		height="600" width="1000">
	</applet>
</body>
</html>
```


----------



## L-ectron-X (1. Feb 2012)

Sieht so aus, als würde ich das Thema ohnehin bis zur Lösung allein begleiten...
Ich habe den Code kopiert und lösche ihn, wenn du das wünschst.

Ich schau mir die Sache dann mal an und melde mich wieder.


----------



## L-ectron-X (1. Feb 2012)

Das ist schon eine etwas ungewöhnliche Anwendung.
Ich nehme mal an, dass es nicht geplant ist, dass sich in der Applet-Version ein maximiertes Fenster über den Browser legt?
Das kannst du verhindern, in dem du dir einen Frame erstellst, und in diesen und ins Applet jeweils ein MainPanel mit dem kompletten Inhalt legst. So ist die Ganze Sache flexibel und von einem Frame unabhängig.

Habe dir trotzdem mal eine fertige Appletcation (Hybridanwendung) zusammengebaut.
Per Doppelklick auf die Jar-Datei startest du die Applikation, und auf die HTML-Datei die Applet-Version.

Das Problem in der Applet-Version ist auch, dass du die VM nicht beenden darfst, was du aber im Frame machst. Das habe ich mal geändert.


----------



## Kanitrino (2. Feb 2012)

Allerherzlichen Dank für Deine Hilfe & Dine Mühe.

Das Hauptproblem war wohl, dass ich das Programm als Applikation geschrieben habe, die eine Graphik über den ganzen Bildschirm erzeugt, und es dann in ein Applet umgewandelt habe, ohne die Größe der HTML-Datei anzupassen.

Leider sehe ich in der Jar-Datei das Programm nicht, könntest Du bitte die geänderten Passagen im Klartext kopieren ?


----------



## Kanitrino (2. Feb 2012)

...und jetzt die schlechte Nachricht : Ich habe die Größenangabe im ursprünglichen Applet korrigiert und es läuft immer noch nicht.


----------



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

Kanitrino hat gesagt.:


> Das Hauptproblem war wohl, dass ich das Programm als Applikation geschrieben habe...


Nein, du bist das Problem falsch angegangen. Eine GUI sollte meiner Meinung nach sämtliche Inhalte für ein Fenster etc. immer in einem Hauptpanel zusammen führen. Dadurch erreicht man ein Maximum an Flexibilität. So wird es recht einfach, aus einer Applikation ein Applet zu machen und umgekehrt.
Es ist jeweils nur noch das Hauptpanel zu instanziieren und in den gewünschen Toplevel-Container einzubauen. 



Kanitrino hat gesagt.:


> Ich habe die Größenangabe im ursprünglichen Applet korrigiert und es läuft immer noch nicht.


Ich hatte dir oben gesagt, woran das liegt. Jedenfalls nicht an den Dimensionen. Sondern an der Art und Weise, wie du das Fenster schließt. Das wirft bei einem Applet eine AccessControlException.
Anbei das komplette Zip-Archiv. Probiere einfach mal die darin enthaltene Jar-Datei aus.
Wie gesagt, es ist eine Hybridanwendung. Sie läuft also auch auf dem Desktop als Applikation.


----------



## Kanitrino (7. Feb 2012)

Nun habe ich seit Tagen versucht, Deine Verbesserungen in die Tat umzusetzen. Das bringt sicherlich eine bessere Strukturierung meiner Programme, löst aber das eigentliche Problem nicht, nämlich, dass ich mein Applet nicht auf meine Internet-Seite stellen kann. Die Einbindung der in Eclipse erzeugten jar-Datei in die HTML-Datei klappt nicht.

Ich beschreibe es noch mal :
Mein Applet besteht aus mehreren Klassen, die in Eclipse in zwei verschiedenen Paketen (Packages) stehen. Ich exportiere sie als jar-Datei, indem ich in Eclipse klicke File->Export->jarFile ... und dann alle benötigten Klasse anklicke.

Ich habe das mal mit einem Versuchs-Applet (bestehend aus einer Klasse) namens "Versuch" gemacht. Dieses steht in dem Paket, das, angelehnt an meine Domain, "de.kanitrino.uebung" heißt. Die so erzeugte jar-Datei trägt den Namen "Trial".

Ich habe diese jar-Datei nun der Einfachheit halber in dasselbe Verzeichnis geschrieben wie die HTML-Datei.

Als richtige Adresse für die Einbindung in die HTML-Datei hat sich schließlich herausgestellt :

```
<applet archive="Trial.jar" code = "de.kanitrino.uebung.Versuch.class"
 		align="middle"
 		height="600" width="1000">
	</applet>
```

Das klappt.

Allerdings klappt es mit meinem "richtigen" Applet schon nicht mehr. Dann kriege ich eine Fehlermeldung, dass die *.class nicht gefunden wurde, und Firefox fängt an zu spinnen. Ich muss ihn nach jedem Versuch per Task-Manager anhalten.

Kann mir vielleicht jemand einmal erklären, wie ich das mit der jar-Datei machen soll ?


----------



## L-ectron-X (8. Feb 2012)

Hast du dir eigentlich mal die Mühe gemacht und die von mir erzeugte Jar-Datei (aus meinem voran gegangenen Beitrag) auf deine Webseite hochgeladen?
Gibts damit die gleichen Probleme?


----------



## Kanitrino (8. Feb 2012)

Auf der Webseite steht eine HTML-Datei, die diese Jar-Datei einbinden will, sie aber nicht findet.
Auf meiner Festplatte steht dieselbe HTML-Datei, die die jar-Datei ebenfalls nicht findet. Auf der HP müsste ich auch noch zusätzlich die Ordnerstruktur berücksichtigen, das hätte erst recht nicht funktioniert, wenn es schon im selben Verzeichnis nicht geht. Ich habe die Klassen aber entpackt und intensiv studiert

Nachdem ich nun eine Woche lang versucht habe, die beiden zusammenzubringen, bin ich nun zu dem Schluss gekommen, dass es mir wichtiger ist, eine jar-Datei auf meiner Webseite einzubinden, als dies mit Eclipse zu tun.

Ich habe also alle Java-Dateien aus Eclipse in ein Verzeichnis kopiert (die Package-Zeile gelöscht), dann mit dem schwarzen DOS-Fenster eingegeben : "jar cf Leguan.jar *.class" und schon hatte ich eine jar-Datei, die funktioniert. Wie es mit Eclipse und packages nun tatsächlich gehen soll, werde ich nie erfahren.

Ich danke Dir auf jeden Fall für Deine Mühen, unterm Strich habe ich eine Menge gelernt.


----------

