[java]URL class: Malformed URLException

Pagina: 1
Acties:

  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
Ik ben wat aan het experimenten met java en ben me wat aan het verdiepen in Swing door middel van een rss feed te downloaden en daar wat bewerkingen mee uit te voeren.

Nu heb ik deze code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static String URLReader()
    {
        URL rss = new URL("http://www.wos.nl/rss/news.php");

        BufferedReader stream = new BufferedReader(new InputStreamReader(
                            rss.openStream()
                            ));
        String rssStream;
        
        while((rssStream = stream.readLine()) != null)
        {
            rssFile = rssStream;
        }
        
        stream.close();
        
        return rssStream;
    }


Maar krijg ik als error:

Unhandled exception type MalformedURLException

Nu heb ik al wat rond gezocht en ik begrijp dat er iets fout zit in de URL, maar ik ben er niet achter wat nu precies. Als ik link naar een simpele index.html krijg ik dezelfde error. Wat is het probleem dus?

  • momania
  • Registratie: Mei 2000
  • Nu online

momania

iPhone 30! Bam!

Dit zou gewoon moeten werken.
Zou je ook de stacktrace bij je exception kunnen laten zien? (Ofwel: weet je zeker dat het mis gaat waar je denkt dat het mis gaat)

Neem je whisky mee, is het te weinig... *zucht*


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Er is niks fout met de URL :) Eerder met je code. De constructor URL() kan een MalformedURLException afwerpen. Je hebt 2 opties: deze in een try-catch-finally blok zetten of de method body uitbreiden met "throws MalformedURLException". Zie ook http://balusc.xs4all.nl/srv/dev-jst-fou.html voor uitleg.

Waar programmeer je in? In een beetje IDE (Eclipse enzo) word je hier gelijk attent op gemaakt :)

[ Voor 8% gewijzigd door BalusC op 09-01-2007 11:39 ]


  • momania
  • Registratie: Mei 2000
  • Nu online

momania

iPhone 30! Bam!

Ow wacht, je krijg een compiler error... niet goed gelezen :X

Neem je whisky mee, is het te weinig... *zucht*


  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
Ik ben nog even verder wezen rommelen en ben nu van de Mailformed URLException af door de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static String URLReader()
    {
        try
        {
            URL rss = new URL("http://www.wos.nl/rss/news.php");
            
            BufferedReader stream = new BufferedReader(new InputStreamReader(
                    rss.openStream()
                    ));
            String rssStream;

            while((rssStream = stream.readLine()) != null)
            {
                rssFile = rssStream;
            }

            stream.close();
            return rssStream;
        }
        catch(MalformedURLException e)
        {
            JOptionPane.showMessageDialog(frame, e.getMessage());
            
            return "";
        }

    }


Maar dan hou ik de volgende foutmeldingen over. Uit Eclipse gehaald overigens. Is het nu zo dat alles tussen try-catch blokken moet omdit te laten werken? Lijkt me niet, maar ja ik ben de n00b.

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems:
Unhandled exception type IOException
Unhandled exception type IOException
Unhandled exception type IOException

at axys.RssRead.RssRead.URLReader(RssRead.java:48)
at axys.RssRead.RssRead.createAndShowGUI(RssRead.java:32)
at axys.RssRead.RssRead.access$0(RssRead.java:14)
at axys.RssRead.RssRead$1.run(RssRead.java:74)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Nogmaals, neem de door mij gegeven linkje door ;) CTRL+F op "unhandled" ofzo.

In Eclipse kun je trouwens op de regel met de fout gaan staan en op CTRL+1 drukken voor een lijstje met oplossingen. Hetzelfde als wanneer je links van de coderegels op de bolletjes klikt :Y)

[ Voor 56% gewijzigd door BalusC op 09-01-2007 11:43 ]


  • momania
  • Registratie: Mei 2000
  • Nu online

momania

iPhone 30! Bam!

pderaaij schreef op dinsdag 09 januari 2007 @ 11:42:
Maar dan hou ik de volgende foutmeldingen over. Uit Eclipse gehaald overigens. Is het nu zo dat alles tussen try-catch blokken moet omdit te laten werken? Lijkt me niet, maar ja ik ben de n00b.

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems:
Unhandled exception type IOException
Unhandled exception type IOException
Unhandled exception type IOException

at axys.RssRead.RssRead.URLReader(RssRead.java:48)
at axys.RssRead.RssRead.createAndShowGUI(RssRead.java:32)
at axys.RssRead.RssRead.access$0(RssRead.java:14)
at axys.RssRead.RssRead$1.run(RssRead.java:74)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Zelfde probleem als met de vorige Exception.

Dit zijn checked exceptions die de class URL kan gooien en moet je dus afvangen

Zoiets dus:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static String URLReader()
    {
        try
        {
            URL rss = new URL("http://www.wos.nl/rss/news.php");
            
            BufferedReader stream = new BufferedReader(new InputStreamReader(
                    rss.openStream()
                    ));
            String rssStream;

            while((rssStream = stream.readLine()) != null)
            {
                rssFile = rssStream;
            }

            stream.close();
            return rssStream;
        }
        catch(MalformedURLException e)
        {
            JOptionPane.showMessageDialog(frame, e.getMessage());
            
            return "";
        }
        catch(IOException e)
        {
            JOptionPane.showMessageDialog(frame, e.getMessage());
            
            return "";
        }

    }

Neem je whisky mee, is het te weinig... *zucht*


  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
Aardig gek!

Ik heb mede door je artikel en met wat hulp van Eclipse het probleem gevonden.

De functie is nu alsvolgt geworden
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static String URLReader() throws IOException
    {
        try
        {
            URL rss = new URL("http://www.wos.nl/rss/news.php");
            
            BufferedReader stream = new BufferedReader(new InputStreamReader(
                    rss.openStream()
                    ));
            String rssStream;

            while((rssStream = stream.readLine()) != null)
            {
                rssFile = rssStream;
            }

            stream.close();
            return rssStream;
        }
        catch(MalformedURLException e)
        {
            JOptionPane.showMessageDialog(frame, e.getMessage());
            return "";
        }

    }


en de aanroep is nu zo

code:
1
2
3
4
5
6
7
8
    try
        {
            editorPane.setText(URLReader());
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(frame, e.getMessage());
        }


Het werkt nog niet helemaal zoals het zou moeten, maar daar kom ik hopelijk zelf wel uit. Bedankt voor de hulp!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Dit is niet de ideale manier, maargoed, je bent kennelijk nog lerende :+ Speel maar vooral heel veel met Eclipse en probeer ook meerdere oplossingen uit dat Eclipse suggereert. Ga niet gelijk voor de eerste oplossing ;) In dit geval zou ik alle excepties gewoon netjes afvangen in meerdere catch blokken, zoals momania al voorstelde :)

  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
Ik ben nog zeker lerende :) Vandaar waarom meerdere catch blokken?

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Omdat het verschillende excepties zijn :) Je kunt natuurlijk ook alle excepties afvangen in één catch blok met "catch (Exception e)", aangezien alle checked excepties subklassen zijn van de Exception klasse. Echter, dan ben je wel weinig specifiek bezig met de foutenafhandeling.

Bij het afvangen van de MalformedURLException zou je een foutmelding kunnen geven "De URL is incorrect" en bij het afvangen van de IOException zou je een foutmelding kunnen geven "De URL is onbereikbaar". Zodat je als zijnde argeloze gebruiker dan weet waar je aan toe bent ;)

[ Voor 33% gewijzigd door BalusC op 09-01-2007 12:02 ]


  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
Duidelijk, thanks voor de uitleg!
Pagina: 1