0

このサイト、オラクルなどを検索しましたが、役に立ちませんでした。

私のプログラムにはいくつかの問題がありますが、今のところ、対処したいのは 1 つだけです。

まず、私が問題を抱えているプログラムの部分を投稿させてください

verifyAge メソッド

 private void verifyAge()
 {
     String ca = iP.cAge.getText();
     try
     {
         a = Integer.parseInt(ca); 
         if (a < 0 || a > 120)
         {
             JOptionPane.showMessageDialog(null,"Enter number between 0"
                     + " and 120", "Input Error",JOptionPane.ERROR_MESSAGE);
             iP.cAge.setText("");  
         }
     }
     catch(NumberFormatException afe)
     {
         JOptionPane.showMessageDialog(null, "Must Enter Number", "Input"
                 + " Error", JOptionPane.ERROR_MESSAGE);
         iP.cAge.setText("");
     }
} 

このコードが入る FileListener があります。コードに進む前に、エラーが修正されるまで実行してループする必要があります。誰か提案があれば、例を挙げてください。

4

2 に答える 2

2

これを実現するには、次の 2 つの選択肢があります。

  1. 検証メソッドから値を返し、acitonPerformed で値を確認してください。検証された場合は、次の方法にのみ移動します。これは、if/else ステートメントをいくつか入れることで実現できます。

  2. または、検証例外クラスを作成できます。検証メソッドが検証できない場合は、実行されたアクションでキャッチできる例外をスローする必要があります。すべての検証メソッドを try ブロックに配置すると、メソッドが例外をスローした場合、catch ブロックに到達するときに他のメソッドをスキップできます。

2番目の問題を正しく理解しているかどうかわかりません. 私が理解しているように、addFile メソッドが例外をスローした場合でも、プログラムを続行したいと考えています。その場合、別の try キャッチで addFile メソッド呼び出しをラップする必要があります。プログラムが addfile の失敗で論理的に続行できる場合、例外の場合に actionPerformed から戻る必要はありません。addFile が失敗したことを catch に記録し、catch ステートメントに続く残りのコードを続行するだけです。

于 2013-06-16T05:32:34.427 に答える
2

まず、 のExceptionような名前の新しいものを作成しますValidationException。各メソッドにこれをスローさせます。でキャッチする必要がありActionListenerます。このようにして、1 つのメソッドが失敗したときに、他のすべてのメソッドの実行を停止します。

次に、失敗したフィールドを強調表示またはフォーカスする何らかの方法が必要です。

Component呼び出された (たとえば)のようなものを使用できますinvalidField。これがnull(actionPerformedメソッド内で) そうでない場合は、呼び出しrequestFocusInWindowてフォーカス コントロールをそのフィールドに戻すことができます。

各検証メソッドは、スローする前にこれを設定する必要があります。ValidationException

于 2013-06-16T05:33:42.450 に答える