2012-02-08 3 views
1

ポップアップ画面を使用して、バックグラウンドアップロードプロセスの更新ステータスを表示しています。間にアップロードをキャンセルしたいと思います。私は、これを達成するために、ポップアップ画面にボタンを追加するか、デバイスの物理的なバックボタンを使用してこれを達成しようとしています。しかし、生成されたイベントのどれもがアプリケーションによって捕らえられていないようです。ここでPopUpScreen Blackberryでのイベントのブロック

は、私は、ポップアップ画面を作成し、すぐにこのラインafther私はこの

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


          } 
        }); 

しかし、もし同様のスレッドで、実際のアップロードプロセスを呼び出していたユーザ

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); 

tを、それを表示しています方法ですポップアップ画面の中にあるキャンセルボタンを押して、応答しない。私はボタンのfieldchangeリスナーメソッドの中にブレークポイントを追加してこれをチェックしました。

ブラックベリーでどうすればいいですか?

答えて

2

invokeLater(intの2番目のビットのコード)を呼び出すと、イベントスレッドでそのRunnableが実行されます。イベントスレッドブロックで何かすると、UIがあなたの説明どおりに反応しなくなります。ブロックする可能性のあるコールは、イベントスレッド上で実行してはいけません。

+0

お返事ありがとうございます。どのようにこれを正しく行うことができますか? – Zach

+0

あなたは既にあなたのプログラムにスレッドを持っているようですので、あなたはJavaとBlackBerryでのスレッドに精通していると思います。すべてのブロッキング関数をイベントスレッドではないスレッドに移動するだけで済みます。どのようにこれを行い、プログラムロジックとのインターフェースがプログラムによって異なります。 – Richard

関連する問題