URL im Hintergrund laden

ireas

Mitglied
Guten Abend!

Ich hoffe mal, ich bin hier im richtigen Abteil … ;)

Mein Problem ist folgendes: Ich programmiere gerade eine Anwendung, die Seiten aus dem Netz lädt. Bisher realisiere ich das über eine URLConnection. Problem: Solange die URLConnection läd, steht das ganze Programm inklusive GUI still. Das ist nich so gut.

Es muß aber auch besser gehen – mein Webbrowser zum Beispiel steht ja auch nicht still, wenn er eine Seite lädt … Die Frage ist aber: wie? Ist mein Ansatz mit der URLConnection nicht der richtige? Oder wie kann ich das verbessern?

Danke für Eure Hilfe im Voraus!

Viele Grüße,
Robin
 

ireas

Mitglied
Verlege das Laden in einen extra Thread.

Habe ich bereits. Allerdings kenne ich mich mit Threads nicht so aus; kann sein, daß ich das nicht ganz optimal gelöst habe:

Java:
public class HTMLDiff {
    // ...
    public void run() {
        String html = new String();
        // fetch HTML
        try {
            html = fetch(diff.getUrl());
        } catch (IOException e) {
            logger.error("Error while fetching HTML for a Diff: " 
                         + e.getMessage());
            System.exit(1);
        }
    }
    // fetch HTML from an url
    private String fetch(String url) throws IOException {
        URL u = new URL(url);
        URLConnection con = u.openConnection();
        BufferedReader r = new BufferedReader(new InputStreamReader(
          con.getInputStream()));
        StringBuilder b = new StringBuilder();
        String line = r.readLine();
        while (line != null) {
            b.append(line);
            line = r.readLine();
        }
        r.close();
        return b.toString();
    }
}

Soweit ich weiß, müßte das ja alle x Takte unterbrochen werden. Dem ist aber scheinbar nicht so :-/ Wenn ich einen solchen Prozeß auslöse und dann entweder auf der GUI rumklicke (auch eigener Thread) oder noch so einen Thread auslöse, dann passiert erstmal nichts …
 

L-ectron-X

Gesperrter Benutzer
So wie es aussieht hast du auch keinen Thread definiert, und gestartet.
Entweder implementierst du Runnable oder erbst von Thread.
 

ireas

Mitglied
Keine Sorge, das habe ich schon ;) es wird ja auch ausgeführt – nur eben „am Stück“ und ohne anderen Threads Luft zu lassen. Ich habe nur den Code etwas gekürzt.
 

L-ectron-X

Gesperrter Benutzer
Die Ausführung von Threads wird so weit ich weiß mit start() angestoßen.
Aber diesen Methode Methodenaufruf finde ich nirgends.
 

ireas

Mitglied
*hüstel* *stotter* ähhhh … run und start sind eben so ähnlich … xD

Danke, das war’s. Ich hab die threadigen Eigenschaften gar nicht in Anspruch genommen. Vielen Dank! :)
 

Ähnliche Java Themen


Oben