Declared Exception still throwing error 必须被捕获或声明为抛出
Declared Exception still throwing error must be caught or declared to be thrown
首先,我不是 Java 程序员,我只是修改现有代码以满足我的需要,所以请多多包涵,因为我对 Java 的了解非常有限。
这是我的代码的一部分:
public String getIp() throws Exception {
URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(
whatismyip.openStream()));
String ip = in.readLine();
return ip;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
现在,当我尝试调用 getIp()
时,我遇到了编译失败:unreported exception java.lang.Exception; must be caught or declared to be thrown
。
这是调用 getIp()
的部分代码:
Phrase downloadDate = new Phrase();
downloadDate.add(new Chunk("On: " + new SimpleDateFormat("MMMM d, yyyy").format(new Date()), FONT_DATE));
downloadDate.add(new Chunk(" at " + new SimpleDateFormat("h:mm a z").format(new Date()), FONT_DATE));
Phrase downloader = new Phrase("This article was downloaded by: " + getEperson(), FONT_DATE);
String IP = getIp();
Phrase userIP = new Phrase("IP Address: " + IP, FONT_DATE);
Phrase userDownloadDate = new Phrase(downloadDate);
Paragraph downloadDetails = new Paragraph();
downloadDetails.add(downloader);
downloadDetails.add(downloadDate);
downloadDetails.add(userIP);
这可能是一个微不足道的问题,但我想知道为什么在 public String getIp()
?
中已经声明了错误 "must be caught or declared to be thrown"
错误是说调用函数必须捕获或声明要抛出。一旦在方法签名上显式声明了异常,所有调用函数都必须按照错误消息中提到的方式处理该异常。
您的 getIp() 方法签名是:
public String getIp() throws Exception {
这意味着这个函数有可能抛出异常。 throws 子句用于指定函数可能抛出的所有类型的异常。
调用此方法时,必须专门处理所有可能出现的异常。喜欢:
try {
String ip = getIp();
} catch (Exception ex) {
// getIp() failed
}
或者因为你在 getIp() 方法中使用了一个 try 块,如果你确定它不会抛出任何异常,那么你可以像这样删除 throws 子句:
public String getIp() {
你的代码应该可以工作。
还有一个越位说明:getIp() 方法在所有情况下都不会 return 一个字符串。只需在其定义的末尾添加一个 return "";
以避免运行时问题。
首先,我不是 Java 程序员,我只是修改现有代码以满足我的需要,所以请多多包涵,因为我对 Java 的了解非常有限。
这是我的代码的一部分:
public String getIp() throws Exception {
URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(
whatismyip.openStream()));
String ip = in.readLine();
return ip;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
现在,当我尝试调用 getIp()
时,我遇到了编译失败:unreported exception java.lang.Exception; must be caught or declared to be thrown
。
这是调用 getIp()
的部分代码:
Phrase downloadDate = new Phrase();
downloadDate.add(new Chunk("On: " + new SimpleDateFormat("MMMM d, yyyy").format(new Date()), FONT_DATE));
downloadDate.add(new Chunk(" at " + new SimpleDateFormat("h:mm a z").format(new Date()), FONT_DATE));
Phrase downloader = new Phrase("This article was downloaded by: " + getEperson(), FONT_DATE);
String IP = getIp();
Phrase userIP = new Phrase("IP Address: " + IP, FONT_DATE);
Phrase userDownloadDate = new Phrase(downloadDate);
Paragraph downloadDetails = new Paragraph();
downloadDetails.add(downloader);
downloadDetails.add(downloadDate);
downloadDetails.add(userIP);
这可能是一个微不足道的问题,但我想知道为什么在 public String getIp()
?
错误是说调用函数必须捕获或声明要抛出。一旦在方法签名上显式声明了异常,所有调用函数都必须按照错误消息中提到的方式处理该异常。
您的 getIp() 方法签名是:
public String getIp() throws Exception {
这意味着这个函数有可能抛出异常。 throws 子句用于指定函数可能抛出的所有类型的异常。
调用此方法时,必须专门处理所有可能出现的异常。喜欢:
try {
String ip = getIp();
} catch (Exception ex) {
// getIp() failed
}
或者因为你在 getIp() 方法中使用了一个 try 块,如果你确定它不会抛出任何异常,那么你可以像这样删除 throws 子句:
public String getIp() {
你的代码应该可以工作。
还有一个越位说明:getIp() 方法在所有情况下都不会 return 一个字符串。只需在其定义的末尾添加一个 return "";
以避免运行时问题。