在最近做项目出现一个java.lang.StackOverflowError异常。最后查资料,终于解决了。
StackOverflowError是由于当前线程的栈满了 ,也就是函数调用层级过多导致。
代码中红色部分,就有可能造成死循环中。
StackOverflowError是由于当前线程的栈满了 ,也就是函数调用层级过多导致。
比如死递归。
下面的函数有时候就可以造成死递归:
private int changeByFrequency(int targetFrequency) {
serviceProvider.getPictureManagerInstance().ExecVideoItem(
EN_MS_VIDEOITEM.MS_VIDEOITEM_CONTRAST, s);
serviceProvider.getPictureManagerInstance().ExecVideoItem(
EN_MS_VIDEOITEM.MS_VIDEOITEM_BRIGHTNESS, s);
cd.setChannelChangeFreezeMode(false);
cd.atvSetManualTuningStart(1000, targetFrequency,
EnumAtvManualTuneMode.E_MANUAL_TUNE_MODE_SEARCH_ONE_TO_UP);serviceProvider.getPictureManagerInstance().ExecVideoItem(
EN_MS_VIDEOITEM.MS_VIDEOITEM_CONTRAST, s);
serviceProvider.getPictureManagerInstance().ExecVideoItem(
EN_MS_VIDEOITEM.MS_VIDEOITEM_BRIGHTNESS, s);
cd.setChannelChangeFreezeMode(true);
cd.saveAtvProgram(0);
cd.atvSetManualTuningEnd();serviceProvider.getPictureManagerInstance().ExecVideoItem(
EN_MS_VIDEOITEM.MS_VIDEOITEM_CONTRAST, s);
serviceProvider.getPictureManagerInstance().ExecVideoItem(
EN_MS_VIDEOITEM.MS_VIDEOITEM_BRIGHTNESS, s);
int nCurrentFrequency = cd.atvGetCurrentFrequency();
if (targetFrequency != nCurrentFrequency) {
System.out.println("nCurrentFrequency: " + nCurrentFrequency);
changeByFrequency(targetFrequency);
}
return nCurrentFrequency;
}
代码中红色部分,就有可能造成死循环中。