Warum verweigert mein Browser die Anzeige von Java-Applets?

Status
Nicht offen für weitere Antworten.

L-ectron-X

Gesperrter Benutzer
Warum verweigert mein Browser die Anzeige von Java-Applets?

Kurz zu Java-Applets: Applets sind kleine Java-Programme, die normalerweise in Webseiten eingebettet werden. Sie werden über ein Netzwerk mit der Webseite von einem Server auf den Client heruntergeladen und in einem Internet-Browser ausgeführt. Sie dienen u.a. dazu, die Funktionalität einer Webseite zu erweitern.
Mehr zum Einbetten von Applets in Webseiten weiter unten.

Da Probleme mit der Ausführung von Applets im Forum schon häufiger angesprochen wurden, hier einige Antworten, die helfen können, die häufigsten Fragen zu beantworten und Fehler zu beseitigen oder zu umgehen.
Diese Seite erhebt nicht den Anspruch auf Vollständigkeit. Gegebenenfalls werde ich sie auch erweitern oder konkretisieren, oder jemand aus dem Forum fügt Ergänzungen hinzu.
Gerne nehme ich dazu auch eine PN entgegen.

Bisher habe ich Probleme mit dem MS-Internet Explorer, Opera und Firefox feststellen können. Die häufigsten Ursachen sind im Folgenden beschrieben.

Generell gilt: Ohne Java VM läuft kein Java-Applet und keine Java-Applikation!
Daher sollte eigentlich inzwischen jeder Rechner eine JRE von Oracle installiert haben.

Momentan gibts es aber vereinzelt noch Probleme mit der 64bit-Version der JRE.
Es kann also sein, dass der Wechsel von der 64bit-Version auf die 32bit-Version Abhilfe zu einem unvermittelt auftretenden Problem bringen kann.
Häufiger wurden ClassNotFoundExceptions beobachtet.

Vorab noch ein Hinweis, weil ich bemerkt habe, dass das oft übersehen wird:
Wenn Applets vom Browser nicht angezeigt werden, ist die Ursache des Problems in der Java-Console zu finden. Anhand der Fehlermeldung lässt sich das Problem schon sehr genau spezifizieren.
Sollten sich bspw. in der Java-Console Ausgaben über eine ClassNotFoundException finden, wissen wir bereits, dass eine JRE installiert ist, weil der Java-Interpreter vom Browser gestartet wurde...
Häufige Fehlermeldungen in der Java-Konsole sind neben der ClassNotFoundException z.B. die NullPointerException und die AccessControlException.
Mehr zu Fehlertypen in Java gibt es hier: http://www.java-forum.org/errors-exceptions/3583-haeufige-errors-exceptions-warnings.html

Ob eine JRE-Installation von überall aus dem System benutzbar ist, lässt sich mit folgendem Befehl, den wir in die Eingabeaufforderung/Shell eintippen, ermitteln:
Code:
java -version
In der Ausgabe sollten sich nun Versionsdaten über die installierte VM finden. Anderenfalls sollte der Pfad zum JRE überprüft werden.
Auch wenn jetzt auf der Kommandozeile eine Fehlermeldung vom Betriebssystem ausgegeben wird, muss das nicht bedeuten, dass es keine oder nur eine defekte JRE gibt.
Ein kleiner [thread=126954]Test[/thread] zeigt, ob es eine funktionstüchtige JVM auf dem System gibt, mit der der Browser zusammenarbeitet.

Mehr zur Einrichtung einer Java-Installation gibt es hier: http://www.java-forum.org/einfuehrungen-erste-schritte/16581-jdk-sdk-installieren-einrichten.html

Wenn der Quellcode des Programms ohne Fehler kompiliert wurde, heißt das noch nicht, dass das Applet auch im Browser seinen Dienst tut. Deshalb ist der erste Ansatzpunkt, einen Fehler zu suchen der AppletViewer, der jedem SDK/JDK beiliegt.



"Wie wird der AppletViewer aufgerufen?"
Der AppletViewer kann von der Konsole (Eingabeaufforderung) oder per Batchdatei aufgerufen werden. Dazu folgenden Befehl eintippen:
Code:
appletviewer [optionen] htmldatei.html
Bitte beachten: Der Pfad zu den Tools des JDK muss dem System bekannt sein.

Wenn das Applet hier läuft, im Browser aber nicht, kann u.U. auch der Browser am Probelm beteiligt sein.
Ältere Browser wurden vor einiger Zeit noch mit veralteten oder modifizierten VM's, die inkompatibel sind oder Fehler enthalten vertrieben. In einigen Fällen kann darin auch ein Grund für Probleme bei der Anzeige von Java-Applets zu suchen sein.
Heute sind in fast allen Fällen Programmierfehler dafür verantwortlich.
Auf jeden Fall muss im Browser die Fähigkeit Java-Applets auszuführen aktiviert sein.
Am besten ist es, immer eine aktuelle Browser-Version mit einer aktuellen JRE installiert zu haben.



"Mein Applet läuft nicht im AppletViewer."
Dann liegt meist ein Fehler im Code des Programms oder der HTML-Seite vor, der erst zur Laufzeit die Initialisierung bzw. die Ausführung verhindert. Die Fehlermeldung in der Java-Konsole gibt mehr Aufschluss über die Art des Fehlers.

Folgende Fragen sollten mit "Ja" beantwortet werden können:
  • Erbt die Klasse, die in die Webseite eingebunden werden soll von Applet bzw. JApplet?
  • Wird mindestens die init()-Methode aus Applet überschrieben?
  • Sind auch die anonymen, vom Compiler erzeugten Klassen im Sichtbarkeitsbereich des Interpreters?
  • Ist das Applet entsprechend dieser Anleitung in die Webseite eingebunden?
  • Wird das Applet mit einer kompatiblen JRE ausgeführt? (Java-Bytecode ist nicht abwärtskompatibel)
  • Ist die Ausgabe in der Java-Console ohne Fehler?



"OK, das Applet läuft im AppletViewer, aber nicht in meinem Browser."
Das kann verschiedene Ursachen haben und ist teilweise auch vom Browser abhängig. Aufschluss über die Art des Fehlers gibt in den meisten Fällen die Browser-Statuszeile oder die Java-Console. Wichtig: Java in den Browser-Einstellungen aktivieren!



"Mein Applet läuft nur in meiner Entwicklungsumgebung."
Es kam vor, dass das Applet zwar innerhalb der Entwicklungsumgebung lief, aber dann weder im Browser noch im AppletViewer angezeigt werden konnte. In 30% der Fälle kann hier ein Versionskonflikt vorliegen.
Das Applet wurde z.B. in der IDE mit Java 1.5 kompiliert, dann aber mit einer früheren JRE-Version versucht auszuführen.
Java Bytecode ab Version 1.5 ist nicht abwärtskompatibel, auch wenn im Quellcode die jeweils neuen Features nicht genutzt, oder nur Klassen und Methoden von älteren Java-Versionen verwendet wurden.
Es kommt dann zu einer solchen oder ähnlichen Ausgabe:
java.lang.UnsupportedClassVersionError: Klassenname (Unsupported major.minor version 49.0)


Weiterhin oft zu sehen:
java.lang.reflect.InvocationTargetException
Wird häufig geworfen, wenn Bilder und Grafikdateien mit [JAPI]Toolkit[/JAPI] eingebunden werden.
Toolkit sollte auf keinen Fall zum Einbinden von Bildern in Applets und für Applikationen nur noch unter AWT und dann auch nur noch für ältere JREs benutzt werden.

java.security.AccessControlException
Wird immer dann geworfen, wenn gegen das Sandbox-Modell verstoßen wird.
Häufige Programmierfehler, die hier gemacht werden sind z.B.:
  • der Versuch die VM zu beenden
  • auf Dateien im Betriebssystem des Clients zugreifen (z.B. Bilder oder Textdateien)
  • häugig auch das Laden von Bildern mit Toolkit#getImage()
  • der Versuch, Verbindungen zu einem anderen Rechner oder einer Datenbank aufzubauen
  • der Versuch, Informationen über den Client-Rechner oder den Benutzer auszulesen

50% fallen auf verkehrt eingebundene Applets, nicht verfügbare Klassen, Packages oder Bibliotheken. 20% gehen auf nicht oder falsch signierte Applets, die kritischen Code auf dem Gastsystem ausführen sollen.
Oftmals braucht ein Applet gar nicht signiert zu werden, wenn man bspw. externe Grafikdateien richtig einbindet. Mehr darüber findet man auch hier: Grafikdateien laden und anzeigen - Byte-Welt Wiki



"Ich habe eine Fehlermeldung, dass mein Applet nicht gefunden werden kann."

Oftmals treten diese Probleme im Zusammenhang mit verkehrt eingebundenen Applets auf.
Hier mal eine beispielhafte Fehlermeldung aus der Java-Console:
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)
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)

"Und wie wird ein Applet richtig in eine HTML-Seite eingebunden?" (Link)



"Ich habe Probleme bei der Anzeige von Applets mit dem MS-Internet Explorer 6.0"
Alle MS-Internet Explorer bis Version 6.0 implementieren eine recht alte JVM, die teilweise auch noch modifiziert wurde und unter anderem nicht mehr vollständig dem Java-Standard von Sun entspricht. Microsoft lehnte früher die Lizensierung der aktuellen JRE's/VM's von Sun für den Internet Explorer und durfte diese somit auch nicht implementieren.
Es gab zwischen Microsoft und Sun wegen Java auch schon heftigen Streit vor Gericht aufgrund von Lizenzrechtverletzungen seitens Microsoft.

Sun hat inzwischen für fast alle Plattformen Java-PlugIns entwickelt, die den Betrieb von Java-Applets in den verschiedenen Browsern sicher stellen sollen.
Es gibt immer noch IE-Benutzer, die sich nicht die Mühe gemacht haben, das passende PlugIn für ihr System herunter zu laden und zu installieren. Aus welchem Grund auch immer.
Bei diesen Benutzern wird ein Applet, welches beispielsweise Swing-Components oder andere nicht in der alten VM implementierte Klassen benutzt, nicht funktionieren. Selbst wenn das Applet nur aus Klassen des JDK/SDK vor Version 1.2.2 (Java 2) besteht, es aber mit einer aktuellen SDK-Version von Sun kompiliert wurde, wird das Applet den Dienst im IE verweigern. Wenn für den IE eine aktuelle JRE von Sun installiert und aktiviert ist, machen Java-Applets eigentlich bei der Ausführung im IE keine Probleme. Allerdings ist die von Microsoft in älteren Betriebssystemen eingesetzten VM nicht mit der von Sun kompatibel.
Es gibt im Moment nur eine befriedigende Lösung, um ein Maximum an Kompatibilität zu erreichen und somit für das Problem: Entweder ist immer ein aktuelles JRE zu verlangen, was nicht ganz benutzerfreundlich ist, oder man entwickelt bzw. kompiliert Applets, die für den Betrieb im Internet vorgesehen sind, nur mit der Sun JDK-Version 1.1.8. Die VM-Version, die der IE in seinen aktuellen Versionen implementiert ist weitestgehend mit dieser kompatibel. Auch IE's mit installiertem aktuellen Java-PlugIn von Sun haben bei der Anzeige keine Probleme (Abwärtskompatibilität).
Alternativ kann man auch gleich auf Webstart setzen.
Um den Compiler des JDK 1.1.8 neben einem aktuellen Compiler der SDK's anzusprechen kann man für den Windows(TM)-PC eine Batchdatei erstellen, die den Classpath einstellt und das Applet kompiliert:
Code:
@echo off 
set CLASSPATH=.;c:\jdk1.1.8\lib\classes.zip 
c:\jdk1.1.8\bin\javac -O -deprecation MeinApplet.java 
pause
Alternativ besteht auch die Möglichkeit, ohne das JDK 1.1.8, also bei einer installierten aktuellen Version eines Sun-Java-SDK kompatiblen Bytecode zu kompilieren, den auch der IE interpretieren kann.
Dazu folgender Befehl:
Code:
javac MeinApplet.java -target 1.1
Die Ausführung der Compiler-Option funktioniert aber nur bis einschließlich Java Version 1.4.2.

Wenn du dein Applet mit dem JDK 1.5 geschrieben hast, es aber Java 1.1 kompatibel kompilieren willst benutzt du folgenden Befehl dazu:
Code:
javac -target 1.1 -source 1.2 MeinApplet.java
Der Compiler akzeptiert dann zum Kompilieren nur Klassen und Methoden bis zum JDK 1.2 (Java 2) und erzeugt Bytecode, der mit JREs ab Version 1.1.8. lauffähig ist.

Wenn Du auf bestimmte aktuelle Funktionen von Oracle Java-Klassen nicht verzichten kannst oder willst, solltest Du auf jeden Fall eine Download-Möglichkeit für das aktuelle Java-PlugIn auf Deinen Webseiten bereit stellen.

Mit dem Aussterben des IE 6.0 im Zusammenhang mit Windows 98, ME, NT, 2000 und XP wird sich das Problem von allein lösen. Die Benutzer sind quasi gezwungen ein Java-PlugIn von Oracle zu installieren, wenn sie in den Genuss von Applets kommen wollen. Für Flash und Shockwave etc. machen sie es ja auch...

Um den IE 6.0 zur Zusammenarbeit mit dem Oracle-JRE zu bewegen kann es nötig sein, in den Browser-Einstellungen die MS-VM zu deaktivieren.


"Ich habe Probleme bei der Anzeige von Applets mit Firefox"
Die Firefox-Version 3.6.14 enthält einen Bug, der es ihr unmöglich macht, Java-Applets auszuführen. Statt eines Applets im Browser erhält man bspw. ClassNotFoundExceptions und NullPointerExceptions in der Java-Konsole.
Das wenige Tage später erschienene Update 3.6.15 behob diesen Fehler.


"Ich habe Probleme bei der Anzeige von Applets mit dem Opera-Browser"
In den Versionen bis 7.54 habe ich mal einen Fehler gefunden.
Es klingt merkwürdig, war aber so. Opera dieser Version kann Applets die lokal auf der Festplatte in einer jar-Datei gespeichert sind nicht ausführen. Das gleiche Applet von einem Webserver herunter geladen, läuft hingegen tadellos. Verschiedene Tests ergaben schließlich, dass Opera in der lokalen Umgebung scheinbar das archive-Attribut des applet-Tags ignoriert.

Mit Opera 8.0 ist dieser Fehler aber entfernt worden.
Allerdings hat der Opera ab Version 8.0 Probleme bestimmte Applets auszuführen. In der Java-Console finden sich ab und zu Fehlermeldungen, wo der Internet Explorer und Mozilla/Firefox tadellos funktionieren. Betroffen sind Applets ab Java 1.0.

Mit dem Opera 9.0 wurden alle bisher angesprochenen Probleme offenbar gelöst.

Seit Opera 10.5x gibt es wieder Probleme mit lokalen Applets, welche nicht ausgeführt werden und Opera meldet ClassNotFoundExceptions. Der AppletViewer und andere Browser starten das gleiche Applet ohne murren.
Mit Opera 10.6x wurden die Probleme behoben.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Oben