2

编译程序时出现此错误:

./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 {

但是,如果我删除“抛出异常”部分,尝试编译,然后再次添加,程序编译成功。谁能解释为什么会这样?


编辑
如果我将“抛出异常”添加到我正在调用的方法中

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
4

3 回答 3

2

通过说

public final void initClientUI() throws Exception {

您是在告诉编译器initClientUI()允许抛出Exception或任何Exception. 由于Exception已检查,因此调用的任何方法都initClientUI()必须捕获Exception或将其列在其throws子句中。

我建议阅读有关异常的教程

于 2013-04-13T21:12:26.417 回答
1

你的问题不是你的方法的声明,你的问题是你什么时候调用它。当您声明这样的方法时

public final void initClientUI() throws Exception

你的编译器会知道它会抛出异常。很好,目前没有问题。但是当你调用它时,你必须处理这个异常。

所以当你说

client.initClientUI()

您的编译器说“此方法引发异常,请处理它”。现在你有两个选择:

try {
    client.initClientUI()
}
catch(Exception e) {
    System.out.println(e);
}

或声明您的方法client.initClientUI()也使用throws Exception.

于 2013-04-13T21:12:43.130 回答
0

throws Exception意味着您将它扔给调用方法,而调用方法应该负责exception通过再次扔它或用try catch.

你应该这样做

public void actionPerformed(ActionEvent e)  {
            try{
              ClientWindow clientUI = new ClientWindow();
              clientUI.initClientUI();
            }catch(Exception e){
              // handle exception
            } 
于 2013-04-13T21:14:56.200 回答