【问题标题】:JVM 104 : Stack OverFlow Error in Blackberry SimulatorJVM 104:黑莓模拟器中的堆栈溢出错误
【发布时间】:2012-03-19 15:52:05
【问题描述】:

添加几个标签和编辑字段后,我的程序中出现此错误,然后将保存的值传递给其他类。

当我按下特定按钮时,它给了我 StackOverFlow 错误,但该类没有实现任何 Hashtable 元素。

LongHashtable.get(long) 行: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());
    }

}}

谢谢!

【问题讨论】:

  • 一些代码可以帮助我们帮助您
  • 你能把整个代码贴在课堂上吗?如果您正在执行重复的方法调用并且堆栈已满,则会导致堆栈溢出错误。
  • 你的头衔震撼了我的灵魂。请编辑我担心的标题
  • 代码已经有,抱歉耽搁了。
  • 我不确定哪个按钮是导致异常的特定按钮,但单击保存按钮肯定会导致 IllegalArgumentException。检查这个,blackberry.com/developers/docs/4.1api/net/rim/device/api/ui/…。

标签: android blackberry stack-overflow


【解决方案1】:

您似乎在运行时耗尽了设备上的内存/堆栈资源。

当您按下一个按钮时,您将组成(一个非常复杂的)屏幕并将其推送到屏幕堆栈上。 当按下新屏幕上的按钮时,您会生成新对象并将这个新屏幕推送到堆栈。

这根本不是一个好方法。而不是考虑拥有一个屏幕并通过更改事件更新其内容。不要产生新的画面,更新现有画面的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多