# URL im Hintergrund laden



## ireas (18. Feb 2010)

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


----------



## L-ectron-X (18. Feb 2010)

Verlege das Laden in einen extra Thread.


----------



## ireas (18. Feb 2010)

L-ectron-X hat gesagt.:


> 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:


```
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 (18. Feb 2010)

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


----------



## ireas (18. Feb 2010)

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 (18. Feb 2010)

Ja gut, wenn man alles nötige vorenthält kann man eben keine brauchbare Antwort erwarten. :bahnhof:


----------



## ireas (18. Feb 2010)

L-ectron-X hat gesagt.:


> Ja gut, wenn man alles nötige vorenthält kann man eben keine brauchbare Antwort erwarten. :bahnhof:



Tut mir leid :-/ Ich wollte das halt sinnvoll kürzen, denn wenn ich Dir den ganzen Code poste, bringt Dir das wahrscheinlich auch wenig.

Das ist der Thread, hier (Zeilen 84 ff.) wird der Thread gestartet.


----------



## L-ectron-X (18. Feb 2010)

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


----------



## ireas (18. Feb 2010)

*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!


----------



## FArt (19. Feb 2010)

Heutzutage sollte man sich auf das package java.util.concurrent verlagern, da man bei Threadhandling doch so einiges falsch machen kann.

ExecutorService (Java 2 Platform SE 5.0)


----------

