2012-03-19 64 views
0

在我的程序中添加一些標籤和editfield,然後將保存的值傳遞給其他類後,出現此錯誤。JVM 104:黑莓模擬器堆棧溢出錯誤

當我按下特定按鈕時,它給了我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); 
} 

這是它傳遞字符串值的類。

我可以知道如何解決這個問題嗎?

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

某些代碼可以幫助我們幫助您 – 2012-03-19 15:53:56

+0

您可以在課堂上發佈整個代碼嗎?如果您正在重複進行方法調用並且堆棧已滿,則會導致堆棧溢出錯誤。 – rfsk2010 2012-03-19 15:54:27

+0

你的頭銜震撼了我的靈魂。請編輯我擔心的標題 – Coffee 2012-03-19 16:02:02

回答

1

似乎在運行時,設備上的內存/堆棧資源耗盡。

當你按下一個按鈕組成一個非常複雜的屏幕並將它推到屏幕堆棧上時。 然後按下新屏幕上的按鈕,然後生成新對象並將此新屏幕推送到堆棧。

這根本不是一個好方法。而不是考慮有一個屏幕,並通過更改事件更新其內容。不要產生新的屏幕,更新現有屏幕的內容。