Bildercache mit flush freigeben?

Status
Nicht offen für weitere Antworten.

dashedot

Mitglied
Hallo!


Habe folgendes Problem:

Ich habe ein Image auf einer Webcam liegen, die ich mithilfe eines Applets und dessen getImage()-Methode
(hab auch alle anderen Methode versucht: ImageIO, über Toolkit) von dort hole.

Das geladene Image wird in einem Panel dargestellt (paintComponent überschrieben, per drawImage() gezeichnet).

Dies funktioniert grundsätzlich auch einwandfrei.


Das Bild auf der Webcam soll sich aber nach Buttonklick aktualisieren. Dies funktioniert auch mithilfe eines CGI-Scripts.
Anschließend sollte das neu erstellte Bild von der Webcam wieder runtergeladen werden und statt dem alten im Panel gezeichnet werden.

Da ist nun der Punkt wo das Problem anfängt.
Das Bild wird nur einmal erfolgreich dargestellt, aber dann wird nur immer wieder das alte Bild gezeichnet, obwohl die Webcam definitiv ein neues Bild anlegt.

Ich habe somit vor dem erneuten Laden ein img.flush() aufgerufen und danach zur Sicherheit ein System.gc().
Danach speichere ich auf das img-Objekt ein neues Bild mit getImage();

Nun zur Frage, was mache ich falsch?
Ich nehme an das Problem besteht, weil das alte Bild im Cache liegt und so nicht mehr neu geladen wird.
Aber sollte das durch einen Aufruf von flush() nicht beseitigt werden?

Ich hoffe auf baldige Antowrt!

Vielen Dank im Voraus!
mfg
 

dashedot

Mitglied
Kann mir hier wirklich keiner helfen?

Fehlen irgendwelche Angaben?
Hab ich zu kompliziert erklärt?

Bin für jeden Hinweis dankbar!


mfg
 

Murray

Top Contributor
Mit dem (Browser-)Cache kann das eigentlich nichts zu tun haben, weil das Image ja nicht per HTTP nachgeladen wird, sondern aus dem Applet gezeichnet wird.

Zeig mal den Code des Applets.
 
G

Guest

Gast
Code:
  public Image getImage() throws MalformedURLException, IOException
    {

          if(img != null)
            {
         
                img.flush();
                System.gc();
}
       img = applet.getImage(new URL(applet.getCodeBase(), "webcam.jpg"));

        return img;
    }


applet ist die Instanz meines Applets, vereinfachte Funktion.

Vielen Dank für die Hilfe!
 

Murray

Top Contributor
Aber wo wird getImage aufgerufen? Und wie wird veranlasst, dass das Applet neu gezeichnet wird? Läuft da ein Thread, der sich in bestimmten Intervallen das neue Image holt?
 

dashedot

Mitglied
Das ist nicht nötig, ich rufe getImage nur per Buttonklick (Renew Image) auf, in dessen Methode auch repaint aufgerufen wird.
 

Murray

Top Contributor
Ach so. Beim Button-Click wird das CGI-Script getriggert, das erzeugt die Datei neu und dann wird paint aufgerufen? Warum rufst du nicht das CGI-Script direkt in getImage auf?
 

dashedot

Mitglied
ja das wird eigentlich eh in getImage() aufgerufen.
habs der übersicht wegen weggegeben.

Also mitt buttonklick rufe ich getImage() auf und gleich danach repaint().


In der getimage methode wird das CGI ausgeführt, dann das bestehende image geflusht und wieder neu eingelesen.


danke für die Hilfe!
 

Murray

Top Contributor
Und der Aufruf kommt beim CGI-Script noch an? Das Script läuft also, und die Datei wird neu erzeugt?
 

dashedot

Mitglied
ja das cgiscript erstellt erfolgreich das neue bild.
das ist nicht das problem.

es kann eben nur irgendwie daran liegen, das das neue Bild einfach nicht mehr heruntergeladen wird, sondern einfach das alte in einem Cache verwendet wird..
 

der JoJo

Bekanntes Mitglied
hast du mal versucht mit new Image() ein neues image anzulegen und nicht das alte weiter zu verwenden?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben