2009-09-16 162 views
1

我對如何在Blackberry JDE中實現FieldChangeListener感到困惑。一種方法有我做我的主類實現FieldChangeListener,再有它內部的一個fieldchanged方法,而另一個有我做的事:黑莓JDE FieldChangeListener

FieldChangeListener listenerUS = new FieldChangeListener() { 
public void fieldChanged(Field field, int context) { 
System.out.println("Something changed!"); 
pushScreen(_newScreen); 
} 
}; 

無論哪種方式,如果我嘗試調用一個方法(如pushScreen,或自定義方法我寫了),我得到一個運行時錯誤。在調試模式下,我的打印語句也沒有顯示出來。但是,如果我徹底刪除fieldChanged方法,它甚至不會編譯,所以我確定它看到代碼?

我已經將偵聽器添加到我希望它連接到的按鈕具有:

  but_temp.setChangeListener(this); 

(在第一種情況下),或者通過將listenerUS

似乎一切都勾搭上了,但我的打印報表顯示了,如果我調用一個方法,我收到了。運行時錯誤。

這有意義嗎?我對如何在黑莓手機上使用聽衆完全困惑?

http://pastie.org/618950

有整體的我的代碼的副本...

+0

我在所發生的事情感到困惑。你說println()調用沒有發生,但同時你說pushScreen()會導致運行時錯誤?另外,什麼是運行時錯誤? – Fostah 2009-09-16 17:14:48

+0

之前,當我寫這個時,它是一個「JUM錯誤104:未捕獲的空指針異常」。 NOW它只是在eclipse中的調試屏幕上崩潰,即使代碼沒有改變。此外,由於某種原因,它現在正在我的印刷版上。 – Jenny 2009-09-17 15:14:02

回答

0

我超級困惑,但我設法解決的事情。我從頭開始創建一個新類,然後複製並粘貼舊代碼。一切正常。我改變的唯一的事情是隻導入Eclipse所說的必需的類(在我從各種教程等得到一些導入語句之前,所以有些可能沒有被使用)。

是否有可能我導入了導致事情要崩潰?

我真的寧願讓我的大部分代碼都在屏幕本身,但試圖在我甚至可以加載之前崩潰整個事情。關於我使用的xml解析器的一些事情並不開心。

http://pastie.org/621932

還有修改後的代碼。我非常沮喪,因爲我知道我對這個框架工作有一些固有的理解,我不是很熱心,而且我的大部分麻煩都來自於此。我認爲只有練習才能幫助我,儘管^ _^;;

1

我看着你的代碼並沒有什麼錯公然跳出我。但是,我不會指定主應用程序類是FieldChangeListener的職責。這不是應該注意的事情。我能爲你做的最好的事情就是提供一個爲ButtonField實現FieldChangeListener接口的示例應用程序。這不是一個解決方案,但也許隨着你對代碼更好的瞭解,你將能夠挑選出與本例不同的東西。希望能幫助到你。

import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.container.MainScreen; 
import net.rim.device.api.ui.component.Dialog; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.ButtonField; 
import net.rim.device.api.ui.FieldChangeListener; 

/** 
* Test implementation of ButtonField. 
*/ 
public class TestAppMain extends UiApplication 
{ 
    /** 
    * Default Constructor. 
    */ 
    private TestAppMain() {   
     pushScreen(new AppScreen()); 
    } 

    /** 
    * App entry point. 
    * @param args Arguments. 
    */ 
    public static void main(String[] args) { 
     TestAppMain app = new TestAppMain(); 
     app.enterEventDispatcher(); 
    } 

    /** 
    * Main application screen. 
    */ 
    private static class AppScreen extends MainScreen 
    { 
     /** 
     * Default constructor. 
     */ 
     public AppScreen() { 
      LabelField title = new LabelField("Button Test Demo", 
        LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH); 
      setTitle(title); 

      // Create a button with a field change listener. 
      FieldChangeListener listener = new FieldChangeListener() { 
       public void fieldChanged(Field field, int context) { 
        ButtonField buttonField = (ButtonField) field; 
        System.out.println("Button pressed: " + buttonField.getLabel()); 
       } 
      }; 
      ButtonField buttonField = new ButtonField("Test Button", ButtonField.CONSUME_CLICK);    
      buttonField.setChangeListener(listener); 
      add(buttonField); 
     }    

     /** 
     * Handle app closing. 
     */ 
     public void close() { 
      Dialog.alert("Goodbye!"); 
      System.exit(0); 
      super.close(); 
     } 
    } 
} 
+0

*點頭*是的,這是我做的另一種方式。但是,我很困惑,屏幕本身有多少,主要代碼中的方法。很多BB提供的教程都將屏幕大部分保留爲空白。不過,在屏幕上做事情確實很有意義。 – Jenny 2009-09-17 14:27:28

0

我Fostah(+1)同意,這是常見的實現FieldChangeListener在現場,經理或屏幕,或者用一個獨立的FieldChangeListener。
另外,從現場推/拉幕:

UiApplication.getUiApplication().pushScreen(nextScreen); 

How to navigate back to the previous screen in the Blackberry emulator?

+0

Hrrm ...試圖做到這一點讓我打印語句成功地打印(萬歲!),但該程序崩潰更難。之前,去了白錯誤屏幕的「」 JUM錯誤104:未捕獲的空指針異常」,但沒有實際上我趕出去(我可以打‘繼續’,並保持運行我的程序然而,現在它踢我進入在Eclipse中調試角度,如果我解開我的代碼更改拿回來是怎麼回事,它仍然這樣做,這讓我困惑。 – Jenny 2009-09-17 14:56:39

+0

調用監聽器內的任何方法,它崩潰的調試屏幕「Screen.class」還有,我想我會重構所有代碼,使工作的衝擊發生在我providerScreen類,然後看看會發生什麼。 – Jenny 2009-09-17 15:11:36

+0

當你找到原因和解決方案,這將是巨大的,有你的答案。 – 2009-09-17 17:12:23