Java应用程序中的MalformedURLException

时间:2014-02-02 14:35:12

标签: java swing joptionpane imageicon

我在我的书中写了一个简单的程序。 但是我得到了MalformedURLException异常。这是我的代码

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));
    }
}

但是我的朋友说他用同样的代码做对了。 什么是我的代码?是因为互联网连接(我使用的是拨号连接) 我

4 个答案:

答案 0 :(得分:3)

Java使用checked Exceptions的概念。您需要将此代码放在try/catch块中,因为它必然会抛出MalformedURLException。像

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

或者让main方法throwsException类似:

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));
    }
}

答案 1 :(得分:2)

使用try和catch块

捕获MalformedURLException
 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
        // ...
    } 

答案 2 :(得分:1)

您的互联网连接不会导致该例外。 (如果您的URL不存在,Java会根据URLConnection documentation抛出IOException,可能是FileNotFoundException。)实际上,您的代码根本不会抛出异常!您所看到的是编译错误:

$ 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

当Java试图将您的程序从源代码转换为机器代码时,它会发现问题,因此它会停止并要求您修复它。您的代码尚未运行 - Java警告您程序的源代码存在问题。 (如果您正在运行IDE,这将显示在“问题”窗格中,而不是来自javac的错误消息。)

问题是您需要在代码中捕获MalformedURLException,或声明main抛出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));
    }
}

请注意,我已在主方法的末尾添加了throws MalformedURLException,这是我上面提到的解决方案的后一种方法。这告诉Java你的main方法可能传播一个MalformedURLException类型的异常。

答案 3 :(得分:0)

由于Java已检查异常,因此必须将MalformedURLException抛出到方法头,或者必须在try / catch块中编写方法逻辑。