Java格式错误的URL异常

26

我正在构建一个Android应用程序,尝试进行http POST请求,但无论我使用什么URL进行请求,Eclipse都会引发Malformed URL异常。我已经尝试了一行代码来自于其中一个Android教程:

URL url = new URL("https://wikipedia.org");

即使如此也会触发错误。Eclipse为什么会对我尝试创建的任何URL都引发此错误?


请发布你的代码和 LogCat。 - Sufian
1
对我来说正常运行。张贴堆栈跟踪。 - Sotirios Delimanolis
请将代码放在您的问题中,而不是在评论中。 - Sufian
7
您的意思是该异常确实被抛出了吗?还是您只是指Eclipse一直在告诉您有异常?如果是后者,那是因为MalformedURLException是一个已检查的异常,也就是说,在代码中必须明确处理它,要么将其包装在try/catch语句中,要么在方法存根中添加throws MalformedURLException - user184994
这行代码是否在 try-catch 块中? - donfuxx
1个回答

67

这里并没有引发异常,而是在抱怨你没有处理它可能会出现的情况,即使它不会出现,因为在这种情况下URL不是畸形的。(Java的设计者认为这个"checked exceptions"概念是一个好主意,尽管实际上它效果不佳。

为了消除这个错误,请在方法声明中添加throws MalformedURLException或它的父类throws IOException。例如:

public void myMethod() throws IOException {
    URL url = new URL("https://wikipedia.org/");
    ...
}

或者,将令人烦恼的异常捕获并重新抛出为未检查的异常:

public void myMethod() {
    try {
        URL url = new URL("https://wikipedia.org/");
        ...
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

Java 8增加了UncheckedIOException类,用于在无法处理IOException时重新抛出它们。在早期的Java版本中,请使用RuntimeException。

9
受检异常并不是一个坏主意,但在MalformedURLException的使用情况下却不是很合适。我不明白Java团队为什么要将MalformedURLException作为受检异常。 - AxiomaticNexus
1
"未处理的异常" 意味着需要对异常进行 "处理"。 - the_prole
在asynch doInBackground中使用新的URL是我避免错误的唯一方法。谢谢! - JayD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接