2012-05-17 2 views
2

Можно ли отложить выполнение try-catch, который запускается при нажатии кнопки. Я устал пробовать различные способы сделать это. Ничего успешного.Отложить выполнение 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); 

Его не то, что я не хочу, чтобы эти заявления должны быть выполнены в all.But я скорее хочу, чтобы они были выполнены после некоторых действий, предшествовавших этой примерки поймать блок встречаются.

Возможно, что-то в этом роде.

enter image description here

я во-первых, хочу поблагодарить всех, кто откликнулся их suggestions.I извинения за моей неспособности объяснить мой вопрос ясно относительно того, что именно я делал в те пытаются заявления об уловах и что заставляет меня делать отложить блок try-catch. Пожалуйста, найдите прилагаемое изображение к моему точному требованию.

переиздан

Я добавил ниже изображение после повышения код рекомендованных через предложения, а также для демонстрации того, что я пытался programmatically.Please общаться, если изображение не ясно.

enter image description here

+0

Итак, вы хотите, чтобы ждать, пока пользователь, чтобы закрыть диалоговое окно ('Dialog.alert'), прежде чем он делает что-нибудь дальше? – weston

+0

Почему они не выполняются после предыдущих действий? – Jivings

+0

@weston Nope. Перед тем, как этот try-catch встретится, открывается новая форма (вкладка), и эта вкладка возвращает результаты, выполняемые действием, обработанным в этих инструкциях try-catch. (Надеюсь, я сделал это как ясно, насколько это возможно) –

ответ

0

Вы могли бы начать нить и ждать состояния, которого вы ищете, чтобы произойти (возможно, явно должны сигнализировать его к потоку, когда consition удовлетворяется)

псевдокод:

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 с помощью своего рода Lock/Semaphore/Monitor для предотвращения одновременного доступа.

+0

Спасибо за ответ. Да, я тоже это пробовал. Но не могу понять, в какой точке я должен запускать поток и как. Можете ли вы предложить пример точного метода. –

+0

См. Обновленный ответ – Attila

+0

.Как я мог использовать предложенный код таким образом. –

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; 
+0

Спасибо за ответ. Пожалуйста, найдите прилагаемое изображение. –

+0

@learning_fly Разве вы не должны использовать прослушиватель кликов вместо FieldChangeListener? – Jivings

+0

Это делается в BlackBerry JDE.Hence ключевое слово FieldChangeListener. –

Смежные вопросы