0

Actionリスナーの一部であるAnonymousInnerクラスからの自分の例外を処理するのが困難に直面しています。

以下に私自身の例外を示します。

class Register extends Exception
{
    String Error;
    public Register() 
    {
    Error = new String("Register Exception");
}
}

ここで、以下に示すメソッドは、マウスリスナーの別のクラスにあります。

public void Gui() throws Register
{
    jButton.addMouseListener(new MouseAdapter() 
    {
        public void mouseClicked(MouseEvent e) 
        {
                throw new Register();    //Unhandled exception type Register
         }          
     });
     throw new Register();   // This works fine.
}

そして、メソッドで例外をスローすれば作業できます。

4

3 に答える 3

2

Java には 2 種類の例外があります。チェック済み (強制的にキャッチする) とチェックなし (強制的にキャッチしない) です。RuntimeExceptionおよびのサブクラスErrorはチェックされませんが、他の例外のサブクラスはチェックされていると見なされます。コードの問題を軽減するには、行を変更します

class Register extends Exception

class Register extends RuntimeException
于 2012-05-22T05:16:52.853 に答える
0

コメントで提案されている @Mortiz のように、 mouseClicked() には句がありませんthrows。mouseClicked() 内で例外を処理する必要があります。

ひどい考えであるコンパイルエラーを回避したい場合は、Register拡張することができますRuntimeException. ただし、これはおそらくあなたが望むものではありません。メソッドは、呼び出し元ではないため、Gui()によってスローされた例外をキャッチしません。Swing イベント処理クラスによって呼び出されます。mouseClicked()Gui()mouseClicked()

あなたが遭遇するのは設計上の問題です。私がこれを正しく読んでいるなら、入力イベントに応答してスローされた例外を処理したいでしょう。長さの回復操作が必要です。このような場合、ユーザーにフィードバックを提供し、 で回復操作用のスレッドを起動する必要がありますmouseClicked()

于 2012-05-22T05:34:42.930 に答える
0

コードを見ると、mouseClicked メソッドからカスタム例外をスローしているときにコンパイル時エラーが発生します。これは、メソッドがカスタム例外をスローしていないためです。

2 つの方法のいずれかで例外を処理できます。1) try - catch を使用します。2) または、カスタム例外をスローするメソッドを作成します。

あなたのシナリオでは、メソッド mouseClicked がカスタム例外をスローしていないため、エラーが発生しています。

それが役立つことを願っています。

于 2012-05-22T05:36:36.287 に答える