编译程序时出现此错误:
./GUI/mainWindow.java:30: error: unreported exception Exception; must be caught or declared to be thrown
clientUI.initClientUI();
^
1 error
但是我的方法实际上抛出异常:
public final void initClientUI() throws Exception {
但是,如果我删除“throws Exception”部分,尝试编译,然后再次添加,程序编译成功。谁能解释为什么会这样呢?
的修改:
如果我将“抛出异常”添加到我调用的方法
public void actionPerformed(ActionEvent e) throws Exception { //<-----add Exception there
ClientWindow clientUI = new ClientWindow();
clientUI.initClientUI();
我收到此错误:
./GUI/mainWindow.java:28: error: actionPerformed(ActionEvent) in <anonymous GUI.mainWindow$1> cannot implement actionPerformed(ActionEvent) in ActionListener
public void actionPerformed(ActionEvent e) throws Exception {
^
overridden method does not throw Exception
1 error
答案 0 :(得分:2)
说
public final void initClientUI() throws Exception {
您告诉编译器允许initClientUI()
抛出Exception
或Exception
的任何子类。由于选中了Exception
,因此调用initClientUI()
的任何方法都必须捕获Exception
或将其列在其throws
子句中。
我建议您阅读tutorial on exceptions。
答案 1 :(得分:1)
您的问题不是您的方法的声明,您的问题是在您打电话时。声明像这样的方法时
public final void initClientUI() throws Exception
你的编译器会知道它会抛出异常。这很好,到目前为止没问题。但是当你调用它时,你必须处理这个异常。
所以当你说
时client.initClientUI()
你的编译器说“这个方法抛出异常,请求处理它”。现在您有两个选择:
try {
client.initClientUI()
}
catch(Exception e) {
System.out.println(e);
}
或声明使用client.initClientUI()
调用throws Exception
的方法。
答案 2 :(得分:0)
throws Exception
表示你将它抛给调用方法,并且调用方法应该负责通过再次抛出它或使用exception
捕获它来处理try catch
。
你应该这样做
public void actionPerformed(ActionEvent e) {
try{
ClientWindow clientUI = new ClientWindow();
clientUI.initClientUI();
}catch(Exception e){
// handle exception
}