2012-02-08 3 views
1

Я использую всплывающее окно, чтобы показать статус обновления процессов загрузки фона. Я хочу отменить загрузку между ними. Я пытаюсь достичь этого либо путем добавления кнопки на всплывающее окно, либо с помощью физического подлокотника устройства. Но похоже, что ни одно из генерируемых событий не попадает в приложение.PopUpScreen Блокирующие события в Blackberry

Вот как я создаю всплывающий экран и его отображения т пользователя

DialogFieldManager manager = new DialogFieldManager(); 
         //DialogFieldManager manager = (DialogFieldManager)getDelegate(); 
         statusUpdate = new LabelField("Please Wait..."); 
         manager.addCustomField(statusUpdate); 
         _gaugeField = new GaugeField("", 0, 100, 0, GaugeField.PERCENT); 
         manager.addCustomField(_gaugeField); 
         cncl_Btn = new ButtonField("Cancel",ButtonField.CONSUME_CLICK | ButtonField.FIELD_HCENTER | ButtonField.NEVER_DIRTY); 
         manager.addCustomField(cncl_Btn); 
         cancelFlag = 0; 
         cncl_Btn.setChangeListener(new FieldChangeListener() 
         { 

          public void fieldChanged(Field field, int context) { 
           // Auto-generated method stub 
           UiApplication.getUiApplication().invokeLater(new Runnable() 
           {    
            public void run() 
            { 
             cancelFlag = 1; 
             //onClose();//as this method exited from application 
             // close();//this method gave me IllegalStateException 
            } 
           }); 

          } 

         }); 

         //BackUpScreen.this.addMenuItem(_viewItem); 
         popup = new PopupScreen(manager); 
UiApplication.getUiApplication().pushScreen(popup); 

Скоро afther эту линию я звоню сам процесс загрузки в потоке, как этот

UiApplication.getUiApplication().invokeLater(new Runnable() { 
          public void run() { 
            //.... do other stuff I wanted done... 
           backUpThread = Thread.currentThread(); 
            uploadItems(); 


          } 
        }); 

Но если Я нажимаю кнопку отмены во всплывающем окне, чтобы не отвечать. Я проверил это, добавив точку останова в методе прослушивания fieldchange кнопки.

Как это сделать в ежевике?

ответ

2

Вызов invokeLater (int второй бит кода) вызывает запуск Runnable в потоке событий. Если что-то вы делаете в блоках потока событий, тогда пользовательский интерфейс станет неактуальным, как вы описываете. Любые вызовы, которые могут блокироваться, не должны запускаться в потоке событий.

+0

Спасибо за ответ. Как я могу сделать это правильно? – Zach

+0

У вас уже есть поток в вашей программе, поэтому я предполагаю, что вы знакомы с потоками на Java и на BlackBerry. Вам просто нужно переместить любые блокирующие функции в поток, который не является потоком событий. Как вы это делаете, и интерфейс с вашей программной логикой зависит от вашей программы. – Richard

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