2 sinat 33415638 sinat_33415638 于 2016.02.23 14:53 提问

新人求助关于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)

4个回答

caozhy
caozhy   Ds   Rxr 2016.02.23 15:04

ProcessRow构造函数调用inputPropertieName()
inputPropertieName()内又调用ProcessRow a = new ProcessRow();造成循环调用,无限递归

sinat_33415638
sinat_33415638 那应该写成什么样啊
接近 2 年之前 回复
u012427018
u012427018   2016.02.23 15:12

楼上正解,代码里无限new ProcessRow 对象,导致栈溢出

u012427018
u012427018 回复sinat_33415638: 你的 inputPropertieName 和Pname 不都在一个类里定义的吗 ,直接调用Pname就行,不用用对象去调用
接近 2 年之前 回复
sinat_33415638
sinat_33415638 我想调用Pname()方法,有不能new ProcessRow ,那我应该写成什么样
接近 2 年之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.02.23 17:03

大多是死循环造成内存溢出,,,

sinat_33415638
sinat_33415638   2016.02.26 10:02

我想调用Pname()方法,有不能new ProcessRow ,那我应该写成什么样

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!