2012-03-19 9 views
0

私のプログラムでは、ラベルとeditfieldをほとんど追加しないでこのエラーが発生し、保存された値を別のクラスに渡しています。JVM 104:Blackberry Simulatorのスタックオーバーフローエラー

特定のボタンを押したときにStackOverFlowエラーが発生しましたが、そのクラスはHashtable要素を実装していませんでした。

LongHashtable.get(ロング)ライン:454

そして、これは私が言及したクラスです。

public final class RSSMainScreen extends MainScreen implements FieldChangeListener{ 

RSSFeedList rfl = new RSSFeedList(); 

String rssUrl1 = "http://kompas.feedsportal.com/c/33612/f/589626/index.rss"; 
String rssUrl2 = "http://feeds.gawker.com/lifehacker/full"; 
String rssUrl3 = rfl.x ; 

ButtonField viewRSSButton = new ButtonField("Refresh"); 
ButtonField editRSSButton = new ButtonField("Settings"); 

DefaultHandler dh = new DefaultHandler(); 

public RSSMainScreen() 
{  

    // Set the displayed title of the screen  
    HorizontalFieldManager hfm = new HorizontalFieldManager(HorizontalFieldManager.FIELD_HCENTER); 

    setTitle(""); 

    viewRSSButton.setChangeListener(this); 
    editRSSButton.setChangeListener(this); 

    String[][] urlData1 = dh.getURLFromRSS(rssUrl1); 
    String[][] urlData2 = dh.getURLFromRSS(rssUrl2); 
    String[][] urlData3 = dh.getURLFromRSS(rssUrl3); 


    add(new LabelField("KOMPAS")); 
    add(new SeparatorField()); 

    for (int i = 0; i < urlData1.length; i++) 
    { 
     String title = urlData1[0][i]; 
     String url = urlData1[1][i]; 
     add(new LinkLabel(title, url)); 
     add(new SeparatorField()); 
    } 

    add(new LabelField("LIFEHACKER")); 
    add(new SeparatorField()); 

    for (int i = 0; i < urlData2.length; i++) 
    { 
     String title = urlData2[0][i]; 
     String url = urlData2[1][i]; 
     add(new LinkLabel(title, url)); 
     add(new SeparatorField()); 
    } 

    add(new LabelField("CUSTOM")); 
    add(new SeparatorField()); 

    for (int i = 0; i < urlData3.length; i++) 
    { 
     String title = urlData3[0][i]; 
     String url = urlData3[1][i]; 
     add(new LinkLabel(title, url)); 
     add(new SeparatorField()); 
    } 

    hfm.add(viewRSSButton); 
    hfm.add(editRSSButton); 

    this.add(hfm); 
} 

これは、String値が渡されるクラスです。

この問題を解決する方法を知っていますか?

public class RSSFeedList extends MainScreen implements FieldChangeListener { 
RSSMainScreen rms = new RSSMainScreen(); 

ButtonField backButton = new ButtonField("Cancel and Back"); 
ButtonField saveButton = new ButtonField("Save"); 
BasicEditField thirdURL = new BasicEditField(); 

String x = ""; 

protected RSSFeedList() 
{ 
    HorizontalFieldManager hfm = new HorizontalFieldManager(HorizontalFieldManager.FIELD_HCENTER); 

    backButton.setChangeListener(this); 
    saveButton.setChangeListener(this); 

    LabelField firstURLLabel = new LabelField("First RSS"); 
    LabelField firstURL = new LabelField(rms.rssUrl1); 

    LabelField secondURLLabel = new LabelField("Second RSS"); 
    LabelField secondURL = new LabelField(rms.rssUrl2); 

    LabelField thirdURLLabel = new LabelField("Third RSS (Editable)"); 

    hfm.add(firstURLLabel); 
    hfm.add(new SeparatorField()); 
    hfm.add(firstURL); 
    hfm.add(new SeparatorField()); 
    hfm.add(secondURLLabel); 
    hfm.add(new SeparatorField()); 
    hfm.add(secondURL); 
    hfm.add(new SeparatorField()); 
    hfm.add(thirdURLLabel); 
    hfm.add(new SeparatorField()); 
    hfm.add(thirdURL); 
    hfm.add(new SeparatorField()); 

    hfm.add(backButton); 
    hfm.add(saveButton); 

    this.add(hfm); 
} 

public void fieldChanged(Field field, int context) 
{ 
    if(field == backButton) 
    { 
     //screen = new RSSMainScreen(); 
    } 
    else if(field == saveButton) 
    { 
     x = thirdURL.getText().toString(); 
     //screen = new RSSMainScreen(); 
     UiApplication.getUiApplication().pushScreen(new RSSMainScreen()); 
    } 

}} 

ありがとうございます!

+0

いくつかのコードは、私たちがあなたを助ける手助けをします –

+0

あなたは、クラス全体でコードを投稿できますか?スタックオーバーフローエラーは、繰り返しのメソッド呼び出しを実行しているときにスタックがいっぱいになると発生します。 – rfsk2010

+0

あなたのタイトルは私の魂を揺さぶった。私が心配していたタイトルを編集してください – Coffee

答えて

1

実行時にデバイスのメモリ/スタックリソースが不足しているようです。

ボタンを押すと(非常に複雑な)画面が作成され、画面上に押し込まれます。 新しい画面のボタンを押すと、新しいオブジェクトが作成され、この新しい画面がスタックにプッシュされます。

これは良いアプローチではありません。その代わりに、1つの画面を持ち、変更イベントを介してコンテンツを更新することを検討してください。新しい画面を作成せず、既存の画面を更新しないでください。

関連する問題