2012-02-08 2 views
1

백그라운드 업로드 프로세스의 업데이트 상태를 보여주는 팝업 화면을 사용하고 있습니다. 중간에 업로드를 취소하고 싶습니다. 나는 팝업 화면이나 장치의 물리적 인 backbutton에 버튼을 추가하여이 작업을 수행하려고합니다. 그러나 생성 된 이벤트 중 아무 것도 앱에서 발견하지 못하는 것 같습니다. 여기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); 

곧 사용자 티셔츠를 표시하고 어떻게 팝업 화면에서 응답하지 않는 취소 버튼을 누릅니다. 나는 button의 fieldchange listener method 안에 breakpoint를 추가하여 이것을 검사했다.

블랙 베리에서 어떻게 할 수 있습니까?

답변

2

invokeLater (int 두 번째 코드의 비트)를 호출하면 이벤트 스레드에서 해당 Runnable이 실행됩니다. 이벤트 스레드 블록에서 수행하는 작업이 있으면 설명하는대로 UI가 응답하지 않게됩니다. 차단할 수있는 호출은 이벤트 스레드에서 실행하면 안됩니다.

+0

답변 해 주셔서 감사합니다. 어떻게하면 제대로 할 수 있습니까? – Zach

+0

이미 프로그램에 스레드가있는 것 같기 때문에 Java 및 BlackBerry의 스레딩에 익숙하다고 가정합니다. 모든 차단 기능을 이벤트 스레드가 아닌 스레드로 이동하면됩니다. 프로그램 논리와 어떻게 인터페이스하는지는 프로그램에 따라 다릅니다. – Richard