2013-04-13 3 views
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 { 

Однако, если я удалю часть «Исключение исключений», попробуйте выполнить компиляцию, а затем добавьте ее снова, программа успешно скомпилируется. Может ли кто-нибудь объяснить, почему это происходит?


EDIT:
Если добавить "бросает исключение" методу я звоню

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

Что касается последней задачи (в EDIT) компилятор говорит, что это все: «переопределяется метод не выбрасывает исключение». То есть если вы переопределите какой-либо метод, сигнатура метода ** переопределенного метода не должна быть изменена **. – informatik01

ответ

2

Говоря

public final void initClientUI() throws Exception { 

вы сообщаете компилятору, что initClientUI() разрешено выкидывать Exception или любой подкласс Exception. Поскольку Exception проверен, любой метод, который вызывает initClientUI(), должен либо уловить Exception, либо включить его в свой пункт throws.

Я бы рекомендовал прочитать tutorial on exceptions.

1

Ваша проблема не в декларации вашего метода, ваша проблема в том, когда вы его вызываете. Когда вы объявляете такой метод

public final void initClientUI() throws Exception 

Ваш компилятор узнает, что он выдаст исключение. Это хорошо, пока не проблема. Но когда вы это называете, вам приходится иметь дело с этим исключением.

Так что, когда вы говорите

client.initClientUI() 

ваш компилятор говорит «этот метод бросает исключение, мольбы справиться с этим». Теперь у вас есть два варианта:

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

или объявить свой метод, который вызывает client.initClientUI() также с throws Exception.

0

throws Exception означает, что вы выбрасываете его вызывающий метод, а метод вызов должны быть ответственными за handeling что exception либо бросать его снова или ловить его с try catch.

Вы должны сделать это таким образом

public void actionPerformed(ActionEvent e) { 
      try{ 
       ClientWindow clientUI = new ClientWindow(); 
       clientUI.initClientUI(); 
      }catch(Exception e){ 
       // handle exception 
      } 
Смежные вопросы