Das Applet ist nicht signiert und darf damit Daten nur vom Host laden, den das HTML-Dokument, die das Applet implementiert hat, benutzt. 1. Appletviewer ========================================================================================= 1.1. Browser als Appletviewer -------------------------------- Der Browser muss Java kennen. Das Applet liegt in einem HTML-Dokument. Erscheint im Browser rechts oben vom Appletfenster ein Ausrufungszeichen, dann wurden Meldungen in der Java-Konsole hinterlegt. Die Java-Konsole wird unter Windows per Kontextmenü also mit Klick per rechter Maustaste auf das Java-Symbol in der Taskleiste (Uhr-Bereich) aktiviert. Beispiel für HTML-Dokument mit dynamischer Player-Erzeugung:
mp3player1










1.2. Appletviewer von Java ----------------------------- liegt unter windows in c:\Programme\Java\xxxxx\bin\appletviwer.exe mit xxxxx z.B. jdk1.6.00_25 1.3. Appletviewer von Eclipse für Java ----------------------------------------- Der Viewer ist in die IDE integriert. Die PARAM des Applet müssen per Run Configuration eingestellt werden, da die HTML-Datei automatisch erzeugt wird. Achtung: Ein leerer Parameter ist in Eclipse nicht zulässig. Daher muss ein Wert "-" angegeben werden. Legt man die HTML-Datei aus 1.1. in den bin-Ordner des Projektes und kann dann ausserhalb von Eclipse das Applet starten. 1.4. Warnungen zur Synchronisierung von Java mit HTM und Browser ------------------------------------------------------------------- Warnung: Der (timeout-gesteuerte) Aufruf einer Java-Methode benötigen einige Performance des Applets ! Warnung: Das Applet arbeitet bezüglich GUI und Sound mit parallel arbeitenden Threads, die getrennte Ressourcen und damit Laufzeitbedarf auch beim Deinstallieren des Applets haben. Leider sind Java-SE und eventuell auch MS Windows nicht echtzeitfähig, so dass nachfolgendes Problem auftritt: Soll exakt nur 1 Sound abgespielt werden und direkt danach das Applet enden, darf die Soundliste nur genau 1 Sound erhalten. oder darf die Soundliste mehr als 1 Sound erhalten, aber die Pausen zwischen den Titeln müssen groß genug sein, damit Java und Windows Zeit haben, um das Applet auch im Soundteil beenden können. Sollte die Pause zu gering sein, dann endet zwar die GUI des Applets innerhalb der Pause, aber es kann der nächste Sound bereits hörbar werden (falls automatisch der nächste Sound starten darf), der genau dann mittendrin abgebrochen wird, wenn der Soundteil des Applets gerade beendet wurde und dabei mehr Zeit benötigt, als die Pause umfasst. Man muss die Pause austesten. Wird das Schließkreuz des Fensters der Player-GUI (also das vom Betriebssystem wie Windows bereitgestellte Kreuz) verwendet, sind Java und HTML asynchron: Dann schließt sich die GUI des Applets, aber der Soundteil bleibt aktiv und endet erst, wenn das Fenster des HTML-Dokumentes geschlossen wird, oder Java begonnen hat, das Applet zu entfernen. Hinweis: Das Applet wird immer mit Zufallswahl des 1. Songs aktiviert ! Die Steuerung der Buttons der Player wie Random oder Play etc. erfolgen per Konfigurationsdatei der GUI. 2. PARAM's des Applets ========================================================================================= Das HTML-Dokument muss im Codebase liegen, also dort, wo die Classendateien liegen. Die PARAM's des Applet werden durch den Programmierer des Applet bestimmt. NAME VALUE Welchen Standard die PARAM's haben, bestimmt der Programmierer. 2.0. Applet ist nicht mehr in HTML 5 enthalten ------------------------------------------------ HTML 5 ist ganz klar weder nachhaltig noch abwärtskompatibel implementiert worden. Das Applet-Tag wurde entfernt. Das ersetzende OBJECT-Tag wurde zugleich verändert. Ziel ist es, Applets in der Praxis dauerhaft aus dem HTML-Kontext zu entfernen. Ansonsten gilt: HTML 5 selbst wird aus anderen Interessen als Nachhaltigkeit entwickelt: 28.05.2012 heise.de Der HTML-5-Sprachstandard für das Erzeugen von Webseiten mit Script erweitert die Überwachung von Webseitennutzer. Mit HTML-5 sind beliebige Daten im Browser speicherbar und abrufbar. Ziel ist es z.B., mit (heimlich) abgelegten Daten die Nutzer zu identifizieren und im Netz zu orten. Zu diesem Online-Tracking gesellen sich die Nutzung personenbezogener Daten zur Preisdiskriminierung, für Kreditraten, für die Informationsauswertungen zum Abschluss von Versicherungen oder Arbeitsverträgen, für Zensur oder für Identitätsdiebstahl. Der Datenmissbrauch wird auch erleichtert, weil das Entfernen der Daten im Cache der HTML-5-Verwaltung im Browser (Local Storage) gegenüber der Datensammlung per Cookies erschwert wurde. Das APPLET-Tag muss mit dem OBJECT-Tag ersetzt werden. Das OBJECT-Tag wurde in HTML 5 ebenfalls abgeändert. Folgende Attribute des OBJECT-Tags sind in HTML 5 nicht mehr verfügbar: align, archive, border, classid, codebase, codetype, declare, hspacce, standby, vspace. Das OBJECT-Tag muss also z.B. so aussehen: OBJECT APPLET ID="mp3playerAppletHTML" TYPE="application/x-java-applet" STYLE="visibility:hidden" CODE="mp3playerApplet.class" WIDTH="1" HEIGHT="1" PARAM wie üblich, ausser PARAM NAME="archive" VALUE="mp3playerAppleteng.jar" mag sein, dass folgendes funktioniert: PARAM NAME="code" VALUE="mp3playerApplet.class" 2.1. PARAM "GUIFile" ----------------------- GUI-Conf-Dateiname ohne Pfadangabe. Wenn Leerkette oder nicht angegeben, dann wird applet-interner Standard verwendet. Hinweis: Das HTML-Dokument muss im Codebase liegen, also dort, wo die Classendateien liegen bei Eclipse ist das projektordner\bin\ Die GUI-Conf-Datei muss im Codebase liegen, also dort, wo die Classendateien liegen bei Eclipse ist das projektordner\bin\ Die Soundlisten-Datei muss im Codebase liegen, also dort, wo die Classendateien liegen bei Eclipse ist das projektordner\bin\ 2.2. PARAM "SoundListFile" ----------------------------- Soundlisten-Dateiname ohne Pfadangabe. Wenn Leerkette oder nicht angegeben, dann wird applet-interner Standard verwendet. Hinweis: Das HTML-Dokument muss im Codebase liegen, also dort, wo die Classendateien liegen bei Eclipse ist das projektordner\bin\ Die GUI-Conf-Datei muss im Codebase liegen, also dort, wo die Classendateien liegen bei Eclipse ist das projektordner\bin\ Die Soundlisten-Datei muss im Codebase liegen, also dort, wo die Classendateien liegen bei Eclipse ist das projektordner\bin\ Die in der Soundliste angegebenen Sounds müssen im selben Verzeichnis wie die Soundlistendatei oder in einem Unterverzeichnis zur Soundlistendatei liegen. z.B. projektordner\bin\ dort liegen Class-Dateien und auch die Soundlistendatei projektordner\bin\t\ dort liegen die Sounddateien in der Sounddatei angeben /t/mp3pl4p.mid oder \t\mp3pl4p.mid nicht jedoch projektordner\bin\t\ dort liegen die Sounddateien ../t/mp3pl4p.mid Hinweis: Für Applet MUSS jeder Pfad Url-fähig sein, da File nicht zugelassen ist. Aus jedem Pfad muss Java fehlerfrei eine Url bilden können, da im Applet nur Url zulässig sind. z.B. http://java.sun.com/j2se/1.3/ docs/guide/collections/designfaq.html28 ../../../demo/jfc/SwingSet2/src/SwingSet2.java file:/~/calendar Pfad darf keine Escape-Zeichen enthalten z.B. %20 Pfadangaben-Trenner sind eventuell betriebsystemspezifisch. Protokolle im Pfad dürfen nur sein "http:/", "https:/", "ftp:/", "file:/", "HTTP:/", "HTTPS:/", "FTP:/", "FILE:/" z.B. http:/ oder HTTP:/ aber nicht HTtp: oder http: file:/ oder FILE:/ aber nicht fIlE: Ein unsigniertes Applet im Browser darf Daten NUR vom eigenen Host laden. 2.3. PARAM "GMSoundBankInternalAllowed" ------------------------------------------ Erlaubnis des Ladens der applet-internen GM-Soundbankdatei für MIDI-Wiedergabe Wert ist "TRUE" für Laden erlauben "FALSE" für Laden nicht erlauben kann entfallen weil Folgendes besser ist: Java-SE unterstützt MIDI-Audio platonisch, veraltet und sehr nutzerunfreundlich. Der Nutzer muss nach jeder Installation von Java-SE (also auch nach jedem Update) die Soundbank für MIDI erneut Java bereitstellen: Manuell. Ausserdem muss der Nutzer sich diese Soundbankdatei selbst per Download beschaffen, wenn er die maximale Qualität nutzen will. Diese Datei ändert aber sich seit vielen Jahren nicht mehr. Das Applet kann mit einer Soundbank versehen sein, die mit Applet-Start dann auch geladen wird, da das Applet internen MIDI-Sound nutzt (Soundbank-Datei zum Applet hat die maximale Soundqualität und muss im CLASS-Pfad des Applets liegen). Es ist besser, zusätzlich Java die Soundbank bereitzustellen, die dann bereits von der Java-Laufzeitumgebung geladen wird. Die durch den Nutzer per Download beschaffte Soundbank mit maximaler Qualität muss exakt unter dem Namen soundbank.gm an folgende Orte manuell kopiert werden (und zwar nach JEDEM Java-Update) /jre/lib/audio Beispiel: c:\Programme\Java\jre6\lib\audio\soundbank.gm und /sdk_dir/jre/lib/audio Beispiel: c:\Programme\Java\jdk1.6.0_23\jre\lib\audio\soundbank.gm Hinweis: c:\Programme\Java\jre6\ entsteht, wenn die Run-Time von Java installiert wird, also auch bei der Installation des SDK. Hinweis: c:\Programme\Java\jdk1.6.0_23\ entsteht, wenn das SDK von Java installiert wird (immer die Runtime mitinstallieren lassen: siehe oben). 3. Warnungen für Verwaltung von Java und HTML und Browser ========================================================================================= Warnung: Der (timeout-gesteuerte) Aufruf einer Java-Methode benötigen einige Performance des Applets ! Warnung: Das Applet arbeitet bezüglich GUI und Sound mit parallel arbeitenden Threads, die getrennte Ressourcen und damit Laufzeitbedarf auch beim Deinstallieren des Applets haben. Leider sind Java-SE und eventuell auch MS Windows nicht echtzeitfähig, so dass nachfolgendes Problem auftritt: Soll exakt nur 1 Sound abgespielt werden und direkt danach das Applet enden, darf die Soundliste nur genau 1 Sound erhalten. oder darf die Soundliste mehr als 1 Sound erhalten, aber die Pausen zwischen den Titeln müssen groß genug sein, damit Java und Windows Zeit haben, um das Applet auch im Soundteil beenden können. Sollte die Pause zu gering sein, dann endet zwar die GUI des Applets innerhalb der Pause, aber es kann der nächste Sound bereits hörbar werden (falls automatisch der nächste Sound starten darf), der genau dann mittendrin abgebrochen wird, wenn der Soundteil des Applets gerade beendet wurde und dabei mehr Zeit benötigt, als die Pause umfasst. Man muss die Pause austesten. Wird das Schließkreuz des Fensters der Player-GUI (also das vom Betriebssystem wie Windows bereitgestellte Kreuz) verwendet, sind Java und HTML asynchron: Dann schließt sich die GUI des Applets, aber der Soundteil bleibt aktiv und endet erst, wenn das Fenster des HTML-Dokumentes geschlossen wird, oder Java begonnen hat, das Applet zu entfernen. NUR die dynamische Verwaltung des Applets kann das Sound-GUI-Problem managen. Die statische Variante des Applets sollte man nicht nutzen! Hinweis: Das Applet wird immer mit Zufallswahl des 1. Songs aktiviert ! Die Steuerung der Buttons der Player wie Random oder Play etc. erfolgen per Konfigurationsdatei der GUI. 4. Javascript-Ansteuerung des Applets mit mp3playerApplet.js ================================================================= // +++++ public functions of mp3playerApplet.js ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ----- Java-Methode des Applets aufrufen: Aktualisierung aller Textdaten, dann Anzeige der Daten. ---- // Init und Start der der Prüfung der HTML-Applet-Instanz muss bereits erfolgt sein. // für Aktivität nur der Musikwiedergabe: siehe javF01b() // Mit Ende des Applets wird das HTML-Element nur dann aus dem HTML-Dokument entfernt, wenn // der User auf das Element mit der Maus klickt. // function javF01a(X00) // X00 Zeiger des HTML-Elementes, das innerhalb document.body, also zwischen und liegen muss. // ----- Java-Methode des Applets aufrufen: Aktualisierung Textdaten, dann Anzeige der Daten. ---------- // Init und Start der der Prüfung der HTML-Applet-Instanz muss bereits erfolgt sein. // Es werden nur Daten der Musikwiedergabe verwendet. // Mit Ende des Applets wird das HTML-Element nur dann aus dem HTML-Dokument entfernt, wenn // der User auf das Element mit der Maus klickt. // function javF01b(X00) // X00 Zeiger des HTML-Elementes, das innerhalb document.body, also zwischen und liegen muss. // ----- Java-Methode des Applets aufrufen: Aktualisierung Textdaten, dann liefern der Daten. ---------- // Init und Start der der Prüfung der HTML-Applet-Instanz muss bereits erfolgt sein. // Es wird nur eine Art der Text-Infromation verwendet. // function javF01c(X00) // X00 Art der Information to get // 0 Kommentar (nicht gescrollter Wert) // Textfeld muss nicht existieren // 1 Dateiname, Textfeld muss nicht existieren // 2 Dauer, Textfeld muss nicht existieren // 3 Timepos, Textfeld muss nicht existieren // 4 TimeNow, Textfeld muss nicht existieren // 5 DateNow, Textfeld muss nicht existieren // 6 Playerstatus, Textfeld muss nicht existieren // 7 Progressbar Wert in Prozent "0" bis "100" // Progressbar muss nicht existieren // 8 Progressbar Textwert // Progressbar muss existieren // 9 Combobox aktuell markiertes Element // Combobox muss existieren // 10 Combobox Selektionsstatus // "0" nichts is selektiert, "1" Element ist selektiert // Combobox must exist (otherwise always "0") // 11 Spinner Wert, Spinner muss existieren // 12 Widergabestatus "0" Stille , "1" Musik aktiv // 13 Applet-Java-instance existiert nicht ? // "0" existiert, "1" existiert nicht // wenn "0" dann das Ende des Players ignoriert // wenn "1" dann Player nicht aktiv // liefert Leerkette im Fehlerfall // ----- Java-Methode des Applets aufrufen: Aktualisierung Textdaten, dann Anzeige der Daten. --------- // Init und Start der der Prüfung der HTML-Applet-Instanz muss bereits erfolgt sein. // Applet existent und oder Player beeendet ? // function javF01d() // returns 0 if applet not exist // 1 if applet exist // 2 if applet exist and player not ended // ----- Java-Methode des Applets aufrufen: Aktualisierung Textdaten, dann Anzeige der Daten. --------- // Init und Start der der Prüfung der HTML-Applet-Instanz muss bereits erfolgt sein. // Es wird nur eine Art der Text-Infromation verwendet. // function javF01e(X00,X01) // X00 Zeiger des HTML-Elementes, das innerhalb document.body, also zwischen und liegen muss. // X01 Art der Information to get // 0 Kommentar (nicht gescrollter Wert) // Textfeld muss nicht existieren // 1 Dateiname, Textfeld muss nicht existieren // 2 Dauer, Textfeld muss nicht existieren // 3 Timepos, Textfeld muss nicht existieren // 4 TimeNow, Textfeld muss nicht existieren // 5 DateNow, Textfeld muss nicht existieren // 6 Playerstatus, Textfeld muss nicht existieren // 7 Progressbar Wert in Prozent "0" bis "100" // Progressbar muss nicht existieren // 8 Progressbar Textwert // Progressbar muss existieren // 9 Combobox aktuell markiertes Element // Combobox muss existieren // 10 Combobox Selektionsstatus // "0" nichts is selektiert, "1" Element ist selektiert // Combobox must exist (otherwise always "0") // 11 Spinner Wert, Spinner muss existieren // 12 Widergabestatus "0" Stille , "1" Musik aktiv // 13 Applet-Java-instance existiert nicht ? // "0" existiert, "1" existiert nicht // wenn "0" dann das Ende des Players ignoriert // wenn "1" dann Player nicht aktiv // ----- Init und Start der Prüfung der HTML-Applet-Instanz (genau 1x aktivieren) --------------------- // function javF01z(X00,X01,X02,X03,X04,X05,X06,X07) // X00 ID of HTML-Applet-Container // nicht null, nicht leer // Container MUSS existieren // Container muss Eigenschaft .innerHTML haben // Container wird inhaltlich komplett ersetzt. // X01 GUI-Confdateiname, Datei muss exisitieren und im Applet-Pfad liegen // nicht null, nicht leer // X02 Musik-Confdateiname, Datei muss existieren und im Applet-Pfad liegen // nicht null, nicht leer // X03 Breite des Java-Symbols beim Laden, in Pixel als String // nicht null, nicht leer // wenn X06 true, so sollte "1" angegeben werden, damit keine leere Fläche, also kein leerer Zwischenraum entsteht. // wenn gross genug, so dass mouseover möglich ist, dann erscheint ein Tooltip zum Schliessen des Players. // Java-Symbol benötigt mindestens 25 Pixel Breite und Höhe. // Sind Breite und Höhe kleiner, wird ein Freiraum angezeigt. // X04 Hoehe des Java-Symbols beim Laden, in Pixel als String, nur verwendet wenn X06 false // nicht null, nicht leer // wenn X06 true, so sollte "1" angegeben werden, damit keine leere Fläche, also kein leerer Zwischenraum entsteht. // wenn gross genug, so dass mouseover möglich ist, dann erscheint ein Tooltip zum Schliessen des Players. // Java-Symbol benötigt mindestens 25 Pixel Breite und Höhe. // Sind Breite und Höhe kleiner, wird ein Freiraum angezeigt. // X05 true so Applet liegt in JAR-Datei, false so Applet aus Class-Dateien // Der Dateiname der jar- und class-Datei ist fest vordefiniert. // X06 true so Java-Symbol beim Laden ausblenden, siehe unbedingt X03 und X04 // Java-Symbol benötigt mindestens 25 Pixel Breite und Höhe. // Sind Breite und Höhe kleiner, wird ein Freiraum angezeigt. // X07 true so Player mit german GUI, sonst englische GUI // nur ausgewertet, wenn wenn X05 true // liefert true wenn alles okay und die Appletprüfung gestartet ist. 5. Javascript-Ansteuerung des Applets ohne mp3playerApplet.js ================================================================ nicht möglich