java.lang.StackOverflowError导致我的应用程序出现问题

时间:2012-06-06 03:24:26

标签: java android loops stack-overflow

我的应用程序出现问题,我无法弄清问题是什么。在ICS上该应用程序可以运行,但在任何2.X上它都有问题。我相信它与循环有关,但我仍然有点困惑。

开发人员控制台向我发出错误报告:

Exception class > java.lang.StackOverflowError
Source method > Matrix.setScale()

这是导致问题的代码......

private void shiftLoop7()
{
    if (d7 != doy && d7 < 366)
    {
        d7 = d7 + 8;
        shiftLoop7();
    }
    else if(d7 == doy)
    {

        if (hour >= 0 && hour < 8)
        {
            shift.setText("C");
            shift.setTextAppearance(getApplicationContext(), R.style.CShift);

            shiftImage.setImageResource(R.drawable.c);
            timeTill.setText("till 7:45 AM");

            dayshift.setText("A Shift");
            day1.setBackgroundResource(R.color.A);
            day2.setBackgroundResource(R.color.A);
            day3.setBackgroundResource(R.color.A);
            day4.setBackgroundResource(R.color.A);

            nightshift.setText("C Shift");
            night1.setBackgroundResource(R.color.C);
            night2.setBackgroundResource(R.color.C);
            night3.setBackgroundResource(R.color.C);
            night4.setBackgroundResource(R.color.C);
        }
        else if (hour >= 8 && hour < 17)
        {
            shift.setText("A");
            shift.setTextAppearance(getApplicationContext(), R.style.AShift);

            shiftImage.setImageResource(R.drawable.a);
            timeTill.setText("till 4:45 PM");

            dayshift.setText("A Shift");
            day1.setBackgroundResource(R.color.A);
            day2.setBackgroundResource(R.color.A);
            day3.setBackgroundResource(R.color.A);
            day4.setBackgroundResource(R.color.A);

            nightshift.setText("C Shift");
            night1.setBackgroundResource(R.color.C);
            night2.setBackgroundResource(R.color.C);
            night3.setBackgroundResource(R.color.C);
            night4.setBackgroundResource(R.color.C);
        }
        else
        {
            shift.setText("C");
            shift.setTextAppearance(getApplicationContext(), R.style.CShift);

            shiftImage.setImageResource(R.drawable.c);
            timeTill.setText("till 7:45 AM");

            dayshift.setText("A Shift");
            day1.setBackgroundResource(R.color.A);
            day2.setBackgroundResource(R.color.A);
            day3.setBackgroundResource(R.color.A);
            day4.setBackgroundResource(R.color.A);

            nightshift.setText("C Shift");
            night1.setBackgroundResource(R.color.C);
            night2.setBackgroundResource(R.color.C);
            night3.setBackgroundResource(R.color.C);
            night4.setBackgroundResource(R.color.C);
        }
    }
    else
    {
        shiftLoop8();
    }
}

1 个答案:

答案 0 :(得分:1)

堆栈溢出的一个常见原因是大量的递归调用 - 由于导致无限递归的错误,或者只是构造为具有非常深的递归的代码。

在您的情况下,堆栈溢出可能是由于您的代码有可能进行相当大的递归调用。你可以重构递归调用只是while循环吗?例如,而不是:

if (d7 != doy && d7 < 366)
{
    d7 = d7 + 8;
    shiftLoop7();
}

你能做到以下几点:

while (d7 != doy && d7 < 366)
{
    d7 = d7 + 8;
}