问题描述
- 新人求助关于java.lang.StackOverflowError的异常问题
-
public class ProcessRow {
Properties source= new Properties();
{
try {
FileInputStream fis = new FileInputStream(new File(
inputPropertieName()));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
source.load(isr);
fis.close();
} catch (Exception e) {
// throw new ExceptionInInitializerError(e);
}
}public String filterAlphabet(String alph) { alph = alph.replaceAll("[^(A-Z)]", ""); return alph; } public String Pname() { UseProcess f=new UseProcess(); String hai = f.fileName; String a = filterAlphabet(hai); String b = hai.substring(hai.indexOf(a), hai.indexOf(a) + 6); return b; } public String inputPropertieName() { /* * System.out.println("请输入配置文件名称:"); Scanner a = new Scanner(System.in); * String propertieName = a.next(); */ // a.close(); ProcessRow a = new ProcessRow(); String propertieName = a.Pname(); return propertieName; } Exception in thread "main" java.lang.StackOverflowError at java.util.Dictionary.<init>(Dictionary.java:55) at java.util.Hashtable.<init>(Hashtable.java:251) at java.util.Hashtable.<init>(Hashtable.java:283) at java.util.Properties.<init>(Properties.java:143) at java.util.Properties.<init>(Properties.java:135) at test.ProcessRow.<init>(ProcessRow.java:18) at test.ProcessRow.inputPropertieName(ProcessRow.java:51) at test.ProcessRow.<init>(ProcessRow.java:22) at test.ProcessRow.inputPropertieName(ProcessRow.java:51) at test.ProcessRow.<init>(ProcessRow.java:22) at test.ProcessRow.inputPropertieName(ProcessRow.java:51)
解决方案
ProcessRow构造函数调用inputPropertieName()
inputPropertieName()内又调用ProcessRow a = new ProcessRow();造成循环调用,无限递归
解决方案二:
楼上正解,代码里无限new ProcessRow 对象,导致栈溢出
解决方案三:
大多是死循环造成内存溢出,,,
解决方案四:
我想调用Pname()方法,有不能new ProcessRow ,那我应该写成什么样
时间: 2024-11-03 19:10:05