Applet funktioniert nur im Appleviewer richtig



  • Hallo,

    ich habe folgendes Problem:
    Ich wollte ein Applet schreiben, das in 5 Sekunden-Abständen das Bild einer Webcam lädt und anzeigt.
    Also habe ich folgendes gemacht:
    1. Programm besorgt, dass alle x Sekunden ein Bild von der Webcam macht.
    2. Applet mit Thread erzeugt (der immer 5 Sekunden schläft).
    3. in der run() Methode mit flush() das Bild gelöscht und danach repaint() aufgerufen.
    4. in der paint() Methode mit getImage(getCodeBase(), "Bild.jpg") das Bild neu geladen und
    5. mit g.drawImage(WebCamBild, 0, 0, this) das Bild angezeigt.

    Das Applet funktioniert im Appletviewer und in der Browservorschau vom JBuilder 8 bestens. Nur im IE oder Netscape zeigt es immer nur das 1. Bild an. Auch wenn ich das Bild während der Laufzeit lösche, wird es immer noch angezeigt. Der Thread läuft auf jeden Fall und ich rufe doch im Thread flush() auf. Das heißt doch, das Bild dürfte dann im Speicher gar nicht mehr existieren.

    Kann sich irgendwer denken, warum das Applet in den Browsern nicht richtig funktioniert?

    Danke.
    Roger



  • 1. idee:
    mal den zugriff auf "immer neue versionen" stellen, optionen, einstellungen beim ie, beim netscape ist das was mit cache..

    die browser haben ihren eigenen cache, den du einfach erstmal per hand ausschalten solltest, damit sie das alte nicht dauernd wieder darstellen, sondern nach neuem suchen

    2. der ie versucht, sofort darzustellen, wenn du flushed.

    der netscape wartet auf das ende des outputs, und zeigt erst dann an. da können auch probleme auf dich zukommen.

    ich denke aber, der punkt 1 ist erstmal der relevante.. stelle alle internen browserspeicher auf "sofort löschen".



  • Also 1. funktioniert im IE schon mal. Nur muss es doch irgendwie möglich sein, dass das so unabhängig von den Cache-Einstellungen des Browsers funktioniert.

    Roger



  • leider schwierig..

    wenn ich zum bleistift webseiten programmiere, ist es sache des clients, seinen cache zu löschen, da habe ich keinen zugriff drauf.

    ich kann den cache des servers raushaun, aber was die user auf aller welt für einstellungen in ihren browsern haben...

    so long..



  • Aber es muss doch irgendwie gehen, dass das Applet sagt: "IE, ich will, dass du dieses Bild neu lädtst."

    Und folgenden Text habe ich bei
    http://www.galileocomputing.de/openbook/javainsel3/javainsel_140010.htm
    gefunden:

    "Eine Webcam erzeugt kontinuierlich neue Bilder. Sollen diese in einem Applet präsentiert werden, so ergibt sich das Problem, dass ein erneuter Aufruf von getImage() lediglich das alte Bild liefert. Dies liegt an der Verwaltung der Image-Objekte, denn sie werden in einem Cache gehalten. Für sie gibt es keinen GC, der die Entscheidung fällt: »Das Bild ist alt«. Hier hilft die Methode flush() der Image-Klasse weiter. Sie löscht das Bild aus der internen Liste. Eine erneute Aufforderung zum Laden bringt also das gewünschte Ergebnis.

    abstract class java.awt.Image

    abstract void flush()
    Gibt die für das Image belegten Ressourcen frei."

    Also, wenn sogar die sagen, dass das so geht (und die sind auch die einzigen, die über den TelepathicWriter berichten ;-)...

    Roger


Anmelden zum Antworten