为什么调用start的时候会出错?当nowQQ和endQQ相差3000以内都没问题,可超过4000,比如nowQQ=1,endQQ=4000的时候程序就出错.....是什么问题?该怎么解决?
错误信息
java.lang.StackOverflowError at java.util.Properties.getProperty(Properties.java:480) at java.lang.System.getProperty(System.java:574) at sun.security.action.GetPropertyAction.run(GetPropertyAction.java:66) at java.security.AccessController.doPrivileged(Native Method) at sun.io.Converters.getDefaultEncodingName(Converters.java:66) at sun.nio.cs.StreamEncoder.forOutputStreamWriter(StreamEncoder.java:65) at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:93) at java.io.FileWriter.<init>(FileWriter.java:61)下面是代码protected void start(){
    if(nowQQ<endQQ){
      nowQQ++;
      send();
    }
    else{
      jTextArea1.append("完成任务!"+'\n');
      butStart.setEnabled(true);
    }
  }
  protected void send(){
    try{
      String jieguo="结果.txt";
        FileWriter qqwrite=new FileWriter(jieguo,true);
            qqwrite.write(nowQQ+"----"+'\r'+'\n');
            qqwrite.flush();
            qqwrite.close();
    }catch(IOException f){
                jTextArea1.append("错误");
        }
    start();
  }

解决方案 »

  1.   

    这个程序根本就是个死循环,两个方法都没有改变nowQQ和endQQ的值,
    start的if判断如果为真,则一直为真,那么永远会start调用end,end调用start,最后只能是stackoverflowerror我觉得这两个方法的设计有问题
      

  2.   

    不好意思看错了,start有nowQQ的值,
    程序抛异常的原因就是因为方法调用太多,倒置栈溢出
    楼主的问题其实就类似于递归函数的溢出
    所以会有endQQ为3000和4000时的巨大差别
      

  3.   

    你的程序等同如下,也就变成递归问题了,自己定义stack试试。protected void start(){
        if(nowQQ<endQQ){
          nowQQ++;
         try{
          String jieguo="结果.txt";
            FileWriter qqwrite=new FileWriter(jieguo,true);
                qqwrite.write(nowQQ+"----"+'\r'+'\n');
                qqwrite.flush();
                qqwrite.close();
        }catch(IOException f){
                    jTextArea1.append("错误");
            }
        start();
        }
        else{
          jTextArea1.append("完成任务!"+'\n');
          butStart.setEnabled(true);
        }
      }