Question

i wrote a simple program which is in my book. but i'm getting the MalformedURLException exception.This is my code

import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class ImageGreet{
    public static void main(String []args){
        URL imageLocation = new URL("http://horstmann.com/java4everyone/duke.gif");
        JOptionPane.showMessageDialog(null,"Hello","Title",JOptionPane.PLAIN_MESSAGE,new ImageIcon(imageLocation));
    }
}

but my friend said he got it right with the same code. what's wr9ong with my code? Is it because of the internet connection(I'm using a dial-up connection) I

Was it helpful?

Solution 4

Since Java has checked exception you have to add throws MalformedURLException to your methods header or you have to write the method logic inside try/catch blocks.

OTHER TIPS

Java uses the concept of checked Exceptions. You need to put this code inside a try/catch block, since it is bound to throw a MalformedURLException. Something like

URL imageLocation = null;
try {
    imageLocation = new URL("http://horstmann.com/java4everyone/duke.gif");
} catch (MalformedURLException mue) {
    mue.printStackTrace();
}

Or let the main method throws the Exception like :

import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class ImageGreet{
    public static void main(String []args) throws MalformedURLException {
        URL imageLocation = new URL("http://horstmann.com/java4everyone/duke.gif");
        JOptionPane.showMessageDialog(null,"Hello","Title",JOptionPane.PLAIN_MESSAGE,new ImageIcon(imageLocation));
    }
}

catch the MalformedURLException using try and catch block

 try {
    URL imageLocation = new URL("http://horstmann.com/java4everyone/duke.gif");
     JOptionPane.showMessageDialog(null,"Hello","Title",
JOptionPane.PLAIN_MESSAGE,new        ImageIcon(imageLocation));
    } 
    catch (MalformedURLException e) { 
        // new URL() failed
        // ...
    } 

Your internet connection would not cause that Exception. (If your URL did not exist, Java would throw an IOException, probably a FileNotFoundException, per URLConnection documentation.) In fact, your code isn't throwing an Exception at all! What you're seeing is a compile error:

$ javac ImageGreet.java
ImageGreet.java:7: error: unreported exception MalformedURLException; must be caught or  declared to be thrown
        URL imageLocation = new URL("http://horstmann.com/java4everyone/duke.gif");
                            ^
1 error

When Java tries to turn your program from source code into machine code, it finds a problem, so it stops and asks you to fix it. Your code hasn't run yet -- Java's warning you that there's a problem with your program's source code. (If you're running an IDE, this will show up in a "problems" pane, as opposed to an error message from javac.)

The issue is that you need to catch the MalformedURLException in your code, or declare that main throws MalformedURLException. For example:

import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class ImageGreet{
    public static void main(String []args) throws MalformedURLException {
        URL imageLocation=new URL("http://horstmann.com/java4everyone/duke.gif");
        JOptionPane.showMessageDialog(null,"Hello","Title",JOptionPane.PLAIN_MESSAGE,new ImageIcon(imageLocation));
    }
}

Note that I've added throws MalformedURLException to the end of your main method, which is the latter of the solutions I suggested above. That tells Java that your main method may propagate an Exception of type MalformedURLException.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top