Problem bei ImageIcon aktualisieren

Felix123

Mitglied
Hallo Leute,

ich schreibe gerade mein erstes Java Programm und möchte mir über eine URL bei Google Maps ein Bild holen. Das klappt auch so weit. Über zwei Methoden hole ich mir den aktuellen Längen- und Breitengrad. Nachdem dieser dann aktualisiert wurde, möchte ich mir dann ein aktualisiertes Bild holen. Laut meinen Längen- und Breitengraden müsste das Bild abwechselnd zwischen New York und Berlin wechseln, es bleibt aber immer auf einem Standord hängen und ich kann mir im Moment nicht erklären warum?

Danke schon mal und Grüße 🙂

Java:
public class StaticGoogleMaps {

public static void main(String[] args) throws InterruptedException, IOException {

// Hier wird als erstes ein einfaches Bild geladen und angezeigt
JFrame test = new JFrame("Google Maps");
ImageIcon imageIcon = new ImageIcon((new ImageIcon("google-maps.png"))
.getImage().getScaledInstance(630, 600,
java.awt.Image.SCALE_SMOOTH));
test.add(new JLabel(imageIcon));
test.setVisible(true);
test.pack();  

double Longitude=getLng();
double Latitude=getLtd();

//Hier möchte ich nun ständig das Bild aktualisieren
while(true){

Longitude=getLng();
Latitude=getLtd();  
System.out.println("Longitude is: " + Longitude + "   Latitude is: " + Latitude); 

    String newimageURL = "https://maps.googleapis.com/maps/api/staticmap?center="
        +Latitude
        + ","
        +Longitude
        + "&zoom=14&size=612x612&scale=2&maptype=roadmap"
        + "&markers=color:red%7Clabel:S%7C"
        +Latitude
        +","
        +Longitude;
URL url = new URL(newimageURL);
java.awt.Image image = java.awt.Toolkit.getDefaultToolkit().createImage(url);
imageIcon.setImage(image);
}
}

public static double  getLng() throws FileNotFoundException, IOException, InterruptedException{
//Hier wird der Längengrad ermittelt
  return Lng;
}

public static double  getLtd() throws FileNotFoundException, IOException, InterruptedException{
 //Hier wird der Breitengrad ermittelt
  return Ltd;
}
     
}
 
Das UI aktualisiert sich nicht während das Programm in der While Schleife arbeitet. Dazu gibt es hier schon 1000 Beiträge. du must das abholen der neuen Daten in einen eigenen Thread auslagern.
 
Das UI aktualisiert sich nicht während das Programm in der While Schleife arbeitet. Dazu gibt es hier schon 1000 Beiträge. du must das abholen der neuen Daten in einen eigenen Thread auslagern.

Das läuft schon in einem eigenem Thread^^

@Felix123, Du musst dein Fenster neu zeichnen lassen, damit das neue Bild sichtbar wird. Allerdings würde deine Schleife zu schnell laufen, als dass man mehr als nur Flackern sieht 😉
 
Jetzt bin ich total verwirrt 😵. Ich dachte mit imageIcon.setImage() lasse ich das Fenster neu zeichnen. Wenn ich nämlich einen Thread.sleep() vor die Schleife setze, dann sehe ich zuerst mein eigenes Bild und danach das von google.
Es scheint schon so, dass es an der Schleife liegt, dass innerhalb dieser das Bild nicht mehr aktualisiert wird.
 
Jetzt bin ich total verwirrt 😵. Ich dachte mit imageIcon.setImage() lasse ich das Fenster neu zeichnen.
Das Bild wird dem ImageIcon zugewiesen, solange das Fenster aber nicht neu gezeichnet wird, ist es nicht sichtbar, das wird's erst nach #repaint.

Wenn ich nämlich einen Thread.sleep() vor die Schleife setze, dann sehe ich zuerst mein eigenes Bild und danach das von google.
So schnell wie der Thread aktuell läuft, werden die Bilder so schnell getauscht, das man nur Flackern sieht. Das du zuerst deins siehst, liegt am #sleep am Beginn der Schleife, setzt das lieber ans Ende 😉
 
Das Bild wird dem ImageIcon zugewiesen, solange das Fenster aber nicht neu gezeichnet wird, ist es nicht sichtbar, das wird's erst nach #repaint.


So schnell wie der Thread aktuell läuft, werden die Bilder so schnell getauscht, das man nur Flackern sieht. Das du zuerst deins siehst, liegt am #sleep am Beginn der Schleife, setzt das lieber ans Ende 😉

Ok mit #repaint am Schluss funktioniert es, danke! Jetzt muss ich noch einen geeigneten #sleep wählen, damit es nach was aussieht.
Was mich verwirrt hat war, dass sich das Bild ja beim ersten Schleifendurchlauf aktualisiert hat, auch ohne #repaint.
 

Zurück
Oben