Cachen von getImage unterbinden.

Status
Nicht offen für weitere Antworten.
R

Rex :(

Gast
Liebe Freunde,

ich verwende getImage, um Bilder von einer entfernten Quelle abzuholen.
Das funktioniert auch sehr gut, nun aber kommt eben das Problem:

Die Daten des Bildes xxx ändern sich sehr schnell.
Deshalb darf getImage keinen Cache benutzen, da sonst noch das alte Bild angezeigt wird, obwohl sich bereits ein neues zum Abholen auf dem Server befindet.


Wie unterbinde ich dieses (in diesem Falle) unerwünschtes Feature?

Vielen Dank im Vorraus!
MFG
Rex
 
R

Rex :(

Gast
Vielen Dank für die sehr rasche Antwort.
Wenn ich createImage verwende, muss ich doch alles wieder umschreiben.

Kann man denn nicht einfach bei getImage den Cache deaktivieren oder ist das nicht möglich?

MFG
Rex :(
 
R

Rex ;)

Gast
Zurzeit verwende ich folgende Zeile:
Code:
Image preview = getImage(transferfile.toURL());
        preview.getScaledInstance(getWidth(), getHeight(), preview.SCALE_SMOOTH);

Was muss ich da ändern?
*ratlos*

MFG
Rex
 
R

Rex ;)

Gast
Applet?
So funzt es :D

aber was meinst du mit Applet?

Nein, aber die oberen Zeilen sind doch für das Einholen eines externen Bildes erforderlich.

Da muss man doch nur diese Zeilen mit Deinem Vorschlag ersetzen und das Caching wäre Vergangenheit.

MFG
Rex
 

Wildcard

Top Contributor
Ich wollte nur wissen welche Methode das ist: getImage
Du hast keine Superklasse angegeben, woher soll ich also wissen von welcher getImage du redest?
 
R

Rex ;)

Gast
Oh, sorry, nein - ehm - ich gebe Dir mal den gesamten Quellcode:

Code:
import java.applet.Applet;
import java.awt.CardLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetAdapter;
import java.awt.dnd.DropTargetDropEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import java.awt.*;
import javax.swing.*;

public class DFApplet extends Applet {
    private String SID="10101";
    private String TID="10101";
    private String receiveURL;
    private String orderno;
    private Image img;
    private InputStream serverInput;
    private static DFApplet appletreference;
    private JProgressBar Progress;
    private String showurl="";
    
    
    public void init() {

        
        appletreference = this;
        //Parameter aus der Webseite auslesen
        SID = getParameter("SID");
        TID = getParameter("TID");
        receiveURL = getParameter("receiveURL");
        orderno = getParameter("OID");
        
        

        
        new DropTarget(this, new DropTargetAdapter() {
            public void drop(DropTargetDropEvent e) {
                try {
                    Transferable t = e.getTransferable();
                    DataFlavor d = e.getCurrentDataFlavors()[0];
                    e.acceptDrop(e.getDropAction());
                    List a = (List) t.getTransferData(d);
                    for (int i = 0; i < a.size(); i++) {
                        File transferfile = (File) a.get(i); //DIE DATEI!!
                             
                        
//VORSCHAU UND ABFRAGE:             
        Image preview = getImage(transferfile.toURL());
        preview = preview.getScaledInstance(getWidth(), getHeight(), preview.SCALE_SMOOTH);
        

        setImage(preview);
        
        preview.flush();   
                        
                        
      
                  int selection = JOptionPane.showConfirmDialog ( null,
                            "Möchten Sie dieses Bild hochladen?", // Fragetext
                            "Bestätigen Sie...", // Titel
                            JOptionPane.YES_NO_OPTION
                            );

                    if(selection == JOptionPane.YES_OPTION){
                        processFile(transferfile);
                    } else {
                      removeAll(); //Sonst alles wieder löschen.  
                    }
                        
                        
                 
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
        System.out.println("Init. Vers. 1.2 - WAYW_");
    }
    
    public void processFile(final File f){
        Progress = new JProgressBar(0, 100);
       //setLayout( new GridLayout( 1, 1 ));
        
        this.add(Progress);
        this.validate();
    new Thread(){ 
       
        
        public void run(){ 
            processFileImpl( f );  
        }
        
        
    }.start();
    
    
    }

    public void processFileImpl(final File f) {

        System.out.println("Datei erhalten!\nSende...\nTarget: "+receiveURL+"\nSID:"+SID);
        
      
                try {
                   
                        ClientHttpRequest transfer = new ClientHttpRequest(appletreference);
                    serverInput = transfer.post(
                            
                            new URL("http://www.xxx.de/test/uptest.php"),
                            
                            new Object[] {
                        
                        "SID", SID,
                        
                        "data", f});
                    
                } catch (MalformedURLException ex) {
                    
                    ex.printStackTrace();
                    
                } catch (IOException ex) {
                    
                    ex.printStackTrace();
                    
                }
                
        
        
    
        
        
        System.out.println("Sendevorgang abgeschlossen.");
        
    
    
     
    
    String statusmessage = "INITIALISATION ERROR! - FATAL ERROR: Bitte kontaktieren Sie umgehend den Support (info@xxx.de), falls dieses Problem weiterhin besteht!";
        String serverresponse = null;
        try {
   
            serverresponse = readout(serverInput);
        } catch (IOException ex) {
            ex.printStackTrace();
        }

     showurl = serverresponse;
     
     
    if(   "" == serverresponse){ statusmessage = "Es ist ein kritischer Verbindungsfehler aufgetreten. Wenn dieses Problem trotz mehrmaligem Versuchens weiterhin besteht, wenden Sie sich umgehend an den Support (info@xxx.de).";  showurl = "http://www.xxx.de/Pictures/attention.gif";
    } else if(serverresponse.equals("101")){ statusmessage = "Zugriff für Upload verweigert!";  showurl = "http://www.xxx.de/Pictures/attention.gif";
    } else if(serverresponse.equals("201")){ statusmessage = "Server wird gerade gewartet. Bitte versuchen Sie es später noch einmal!";  showurl = "http://www.xxx.de/Pictures/attention.gif";
    } else if(serverresponse.equals("202")){ statusmessage = "Der Upload-Service ist gerade aus technischen Gründen nicht erreichbar. Versuchen Sie es später bitte erneut!";  showurl = "http://www.xxx.de/Pictures/attention.gif";
    } else if(serverresponse.indexOf("300") != -1){ statusmessage = "OK"; 
    } else if(serverresponse.equals("301")){ statusmessage = "Transferfehler! Ihre Datei " + f.getName() + " ist zu groß! Bitte komprimieren Sie diese und versuchen Sie es erneut!"; showurl = "http://www.xxx.de/Pictures/attention.gif";
    } else if(serverresponse.equals("302")){ statusmessage = "Transferfehler! Ihre Datei " + f.getName() + " konnte nicht hochgeladen werden. Es scheint ein interner Fehler im Server aufgetreten zu sein oder ein Verbindungsfehler ihrerseits besteht. Überprüfen Sie die Verbindung zum Internet und versuchen Sie es erneut. Falls dieses Problem persitiert, bitte umgehend an den Support (info@xxx.de) wenden!";
     showurl = "http://www.xxx.de/Pictures/attention.gif";
    }
    
   
    System.out.println("\nServer antwortet mit: " + serverresponse+"\n\n URL: "+showurl);
    
 
    try {
        MediaTracker mt = new MediaTracker(this);
        Image pic = getImage(new URL(showurl));
        pic = pic.getScaledInstance(getWidth(), getHeight(), pic.SCALE_SMOOTH);
        
        mt.addImage(pic, 9);
            try {
                mt.waitForAll();
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        setImage(pic);
        
       pic.flush();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
 }
   
    
/** Mit Aufruf dieser Methode kann dem Applet zur Laufzeit von außen ein
 * anderes Bild zur Anzeige übergeben werden.
 */

    public void setImage(Image img) {
        removeAll();
        this.img = img;
        repaint();
    }
    
   public void paint(Graphics g) {

      if(img != null) {
      
      g.drawImage(img, 0, 0, this);
       }
    }
    public String readout(InputStream is) throws IOException {
        StringBuffer sb = new StringBuffer();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line;
        while ((line = br.readLine()) != null)
            sb.append(line);
        return sb.toString();
    }
    
     public void setProgressStatus(int percentage){
         Progress.setValue(percentage);
        // System.out.println("Percentage: "+percentage+"\n");
         if(percentage == 100){ this.remove(Progress); }
         repaint();
     }     
   
}


MFG
Rex
 
R

Rex ;)

Gast
Hä?
Eins verstehe ich nicht:
Mit CreateImage kann man ne leere Zeichenfläche erzeugen, aber kein Bild mit grabben.

Gibt es irgendwo ein Beispiel, welches zeigt, wie der Buffer deaktiviert wird?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben