2

ボタンのクリックでトリガーされる try-catch の実行を延期することは可能ですか。これを行うためにさまざまな方法を試すのにうんざりしています。どれも成功しませんでした。

ボタンがあるとしましょう。ボタン クリック フィールド変更リスナーで、これらの try catch ステートメントが実行されます。

    ButtonField showInputButton = new ButtonField(" Search ",ButtonField.FIELD_HCENTER | ButtonField.CONSUME_CLICK);
      showInputButton.setChangeListener(new FieldChangeListener() 
      {

            public void fieldChanged(Field field,int context) 
            {
                    Dialog.alert(TextField1.getText());
                //Here there are some code snippets for jumping to another form
                  try
                  {   
                    //Some statements that filter data from database
                  }
                  catch( Exception e ) 
                    {         
                        System.out.println( e.getMessage() );
                        e.printStackTrace();
                    }
            }
        }

                    );

      add(showInputButton);

これらのステートメントをまったく実行したくないというわけではありませんが、その try-catch ブロックの前にいくつかのアクションが発生した後にそれらを実行したいのです。

この種の可能性はありますか。ご案内ください。

ここに画像の説明を入力

最初に、彼らの提案に応えてくれた皆さんに感謝したいと思います。try catch ステートメント内で正確に何をしていたのか、try-catch ブロックを延期する理由について、私の質問を明確に説明できなかったことをお詫びします。私の正確な要件に合わせて添付の画像を見つけてください。

再編集

提案を通じて推奨されるコードを強化し、プログラムで試したことを紹介するために、以下の画像を追加しました。画像が明確でない場合はお知らせください。

ここに画像の説明を入力

4

2 に答える 2

1

後で使用するために、例外を変数として保存できます...

Exception savedException;
try {   
   //Some statements that filter data from database
}
catch( Exception e ) {         
  savedException = e;
}

// do more stuff then deal with exception afterward
throw savedException;
于 2012-05-17T14:47:08.030 に答える
0

スレッドを開始し、探している条件が発生するのを待つことができます (条件が満たされたときにスレッドに明示的に通知する必要がある場合があります)。

擬似コード:

static boolean isConditionMet = false;

public void fieldChanged(Field field,int context)  // inside the ButtonField
{
  Thread thread - new Thread() {
    public void run() {
      // TODO: wait for condition using isConditionMet
      // TODO: perform desired actions when condition happens
      // TODO: reset isConditionMet
    }
  };
  thread.start(); 
}

もちろんisConditionMet、探している条件が真であることをテスト/認識できる場所をどこかに設定する必要があります。isConditionMetまた、同時アクセスを防ぐために、ある種のロック/セマフォ/モニターでアクセスを保護する必要があります。

于 2012-05-17T14:32:12.733 に答える