Bilder aus dem Web in Applikation anzeigen

moemaster

Erfahrenes Mitglied
Hallo Leute,

mit
Code:
Icon ico = new ImageIcon("C:\test.png");
kann man lokalgespeicherte Bilder ja z.B. auf einem Label o.ä. anzeigen. Nun möchte ich aber kein Bild von meiner Platte anzeigen, sondern eins aus dem Web. Es funktioniert so zwar nicht, aber rein logisch und um zu verdeutlichen, was ich will müsste es
Code:
Icon ico = new ImageIcon("htttp://www.example.de/test.png/");
lauten. Ich hoffe ihr versteht mein Dilemma und könnt mir helfen: ich möchte gerne ein Bild aus dem Internet beispielsweise auf einem Label anzeigen. :)

Beste Grüße/
With best regards,
Moe
 
Hm, also bei mir funktioniert das leider nicht. Es wird zwar keine Exception geschmissen und der Rest des Programms läuft auch nach wie vor einwandfrei, aber das Bild wird einfach nicht angezeigt. :(
 
hmm, seltsam ....

Sehe gerade, dass der letzte Slash im String überflüssig ist und vlt. Probleme macht.

Du kannst auch versuchen, vorher die URL zu verifizieren ....

Was sagt denn der Debugger ? ? ? ;-]

Gruß
Klaus
 
Das Seltsame ist, dass wenn ich als URL keine Internetadresse, sondern einen lokalen Bildpfad angebe:
Code:
URL url = new URL("file:///H:/example/test.png");
hat er überhaupt keine Probleme damit, das Bild anzuzeigen. Aber sobald er auf irgendein Image im Web zugreifen soll zeigt er einfach gar nix mehr an.:confused: Um gleich voreilige Schlüsse vorwegzunehmen: eine Internetverbindung besteht, ein großer Teil des Programm greift auf Web zu und dort treten keinerlei Probleme auf ;)
 
wie gesagt, Du könntest mal versuchen, vor dem Zugriff die URL zu validieren. Ich mache das mit folgender Methode:
Java:
private boolean validateUrl(URL url) 
{
    boolean bLoadOK = true;
    HttpURLConnection httpcon = null;
    int responsecode = -1;
    if ( (bLoadOK) && (url != null)) 
    {
        try 
        {
            String strTheHostIP = InetAddress.getByName(url.getHost()).getHostAddress() ;
            String strTheHostname = InetAddress.getByName(url.getHost()).getHostName();
            int thePort = url.getPort();
            String thePath = url.getPath();
            URL theURL = null;
            if (thePort == -1)
            {
                 theURL = new URL("http://" + strTheHostIP + thePath);
            } 
            else 
            {
                theURL = new URL("http://" + strTheHostIP + ":" + thePort + thePath);
            }
            httpcon = (HttpURLConnection) theURL.openConnection();
            httpcon.setRequestProperty( "Host", strTheHostname);
            responsecode = httpcon.getResponseCode();
        }
        catch (IOException ex1) 
        {
            bLoadOK = false;
        }
    }
    if (responsecode != java.net.HttpURLConnection.HTTP_OK) // 200 -> HTTP_OK
    {
        bLoadOK = false;
    }
    else
    {
        bLoadOK = true;
    }
    return bLoadOK;
} // validateUrl

Das müßte eigentlich alles Java-Standard sein ... sonst bitte ggf. nachfragen!

Kann es ggf. sein, das Ein Proxy-Server den Bildzugriff verhindert? Damit ich hatte ich vor geraumer Zeit auch schon mal Probleme ....

Gruß
Klaus
 
Die Seite scheint valide zu sein. Ich weiß nicht, ob für eine Java Applikation andere Proxyeinstellungen gelten als für mich, aber ich kann mir die Bilder ohne Probleme anschauen. Ich bin echt ratlos:(
 
Hm komisch..

Du verrätst nicht, wo du den Bildpfad hebekommst. Ich hatte ma ne ähnliches Problem.
Da habe ich die URLdaten aus na .properties datei gelesen und in der datei war ein Leerzeichen zu viel(also in der Zeile der url) .. und so hat er die url nicht laden können.


Wenn die URL wirklich richtig ist aber es dennoch nicht geht, dann poste doch mal die URL, damit andere ma testen können, ob das bei ihen auch nicht geht... .
 
Hm bei mir gehts:
Teste mal die Programme bei dir:
Java:
public class II {
	public static void main(String args[]) throws MalformedURLException {
		JFrame f = new JFrame();
		ImageIcon ii = new ImageIcon(
				new URL(
						"http://www.webshotspro.com/gd/show.php/400x300/screenshots/cff81936b955dfdecbdd987a11dcb57d.jpg"));
		System.out.println(ii);
		System.out.println(ii.getDescription());

		switch (ii.getImageLoadStatus()) {
		case MediaTracker.ABORTED:
			System.out.println("ABORTED");
			break;
		case MediaTracker.COMPLETE:
			System.out.println("COMPLETE");
			break;
		case MediaTracker.ERRORED:
			System.out.println("ERRORED");
			break;
		case MediaTracker.LOADING:
			System.out.println("LOADING");
			break;

		default:
			break;
		}

		f.add(new JLabel("Bild", ii, JLabel.LEFT));

		f.pack();
		f.setVisible(true);
	}
}
Java:
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class II2 {
	static BufferedImage i;

	public static void main(String args[]) throws IOException {
		JFrame f = new JFrame();

		i = ImageIO
				.read(new URL(
						"http://www.webshotspro.com/gd/show.php/400x300/screenshots/cff81936b955dfdecbdd987a11dcb57d.jpg"));
		f.add(new Canvas() {

			@Override
			public void paint(Graphics g) {
				g.drawImage(i, 0, 0, this);
			}
		});

		f.setSize(100, 100);
		f.setVisible(true);
	}
}
 

Neue Beiträge

Zurück