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 回答