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 {

ただし、「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
4

3 に答える 3

2

と言う事で

public final void initClientUI() throws Exception {

initClientUI()スローすることが許可されているコンパイラーExceptionまたは のサブクラスを伝えていますExceptionExceptionがチェックされているため、呼び出すメソッドはすべて、それをキャッチinitClientUI()するか、その句Exceptionにリストする必要があります。throws

例外に関するチュートリアルを読むことをお勧めします。

于 2013-04-13T21:12:26.417 に答える
1

あなたの問題はあなたのメソッドの宣言ではなく、あなたの問題はあなたがそれを呼び出すときです。このようなメソッドを宣言すると

public final void initClientUI() throws Exception

コンパイラは、例外がスローされることを認識します。よかった、今のところ問題なし。しかし、それを呼び出すときは、この例外に対処する必要があります。

だからあなたが言うとき

client.initClientUI()

あなたのコンパイラは、「このメソッドは例外をスローします。処理してください」と言います。次の 2 つのオプションがあります。

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 に答える