Hallo,
Das Applet startet vorher und der Hintergrund wird blau. Es liegt also nicht am Einbinden des Applets, sondern am Applet selbst. Irgenwas hast Du bei Deinem Threading falsch gemacht.
Ja, sieht so aus. Das Komische daran ist nur, dass das Applet in Netscape oder beim Starten über die cmd fehlerfrei läuft. Nur in den Browsern funktioniert es einfach nicht richtig.
Ja, die Browser sind auch selbst Multithreading-Anwendungen. Je nachdem, wie Du das Applet-Threading aufbaust, kannst Du die schon mächtig durcheinander bringen.
Code:
<!--[if !IE]>-->
<object classid="java:inputbox.InputBox"
type="application/x-java-applet"
archive="mypackage.old/TextInput.jar"
height="20" width="600" >
<!-- Konqueror browser needs the following param -->
<param name="archive" value="mypackage.old/TextInput.jar" />
<!--<![endif]-->
<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
height="20" width="600" >
<param name="code" value="inputbox.InputBox" />
<param name="archive" value="mypackage.old/TextInput.jar" />
</object>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
Ich hab obigen Code anstatt des bisherigen Code eingebaut und die values "mypackage.old/TextInput.jar" durch den Pfad "http://www....de/applets/inputbox/TextInput.jar" ersetzt. Funktionert das so bei Dir? Bei mir leider nicht. Vielleicht hab ich auch etwas falsch vrstanden.
Der obige Code(ja, mypackage.old/TextInput.jar ist der relative Pfad zum JAR) funktioniert(Er startet das Applet) so bei mir im IE6.0, FF1.5, FF2.0, Opera9.0 unter Windows und Konqueror und Mozilla unter Debian-Linux. Bei Opera versucht dann irgendwas ständig in das sleep von inputbox.Wait.someMiliSec einzugreifen.
Schau also mal nach, was Da bei inputbox.Wait.someMiliSec bei Dir passiert, ggf. poste den Codeteil mal hier.
public class Wait {
[...]
public static void someMiliSec(long s) {
try {
//Thread.currentThread().sleep(s * 100);
Thread.sleep(s * 100);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Der Aufruf erfolgt in der Klasse InputBox über
Wait wait = new Wait();
wait.someMiliSec(1); //alternativ: wait.someMiliSec(100); und dafür im try-Block Thread.currentThread().sleep(s);
Ich würde die Methode .sleep() nicht vom laufenden Thread, sondern abstrakt von der Klasse Thread aufrufen. So kenne ich es jedenfalls. Ob das Dein Problem löst, weiß ich nicht.
Zur Problemlösung interessant wäre noch, wie Du den Thread startest. Ist InputBox runnable? Wenn ja, wie sehen die Methoden start() und run() von InputBox aus?
Insbesondere wäre es wichtig, per
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
_einmalig_, also außerhalb der Schleife, beim run() dem Laufschriftthread mitzuteilen, dass er sich nicht so wichtig nehmen soll ;-).
(@ Axel Richter: Du kannst das .jar-file auch entpacken und genauer ansehen. Ich selbst finde (leider) keinen Fehler :-( der mich zur Lösung des Problems führt.)
*g* Ja, toll. Da sind die .class-Files drin. Pack die .java-Files mit ein, dann könnte ich das.
btw.: Bist Du sicher, dass Du für so etwas unwichtiges wie eine Laufschrift wirklich ein JavaApplet einsetzen willst? Oder ist das nur ein Lernprojekt?
btw2.: Wenn schon, willst Du nicht eines der Millionen Laufschrift-Applets, die schon existieren, einfach nur nutzen bzw. umbauen? Bsp.:http://userpage.fu-berlin.de/~ahahn/java/laufschrift/laufschrift.html. Das läuft auch im Opera unter Windows.
viele Grüße
Axel