2015-07-24 1 views
0

У меня возникла странная ошибка. Мой весь код Java работает без каких-либо проблем на моем ноутбуке (Windows 7), но когда я загрузить его на наш сервер (Linux), то я вижу следующее TOMCAT журнал:Исключение в потоке «ajp-bio-8009-exec-1»

Exception in thread "ajp-bio-8009-exec-1" java.lang.StackOverflowError 
    at java.lang.System.checkKey(System.java:831) 
    at java.lang.System.getProperty(System.java:705) 
    at sun.security.action.GetPropertyAction.run(GetPropertyAction.java:84) 
    at sun.security.action.GetPropertyAction.run(GetPropertyAction.java:49) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.io.PrintWriter.<init>(PrintWriter.java:116) 
    at java.io.PrintWriter.<init>(PrintWriter.java:100) 
    at mig.common.src.ErrorCheck.errorMsg(ErrorCheck.java:50) 
    at mig.common.src.SendEmail.send(SendEmail.java:71) 
    at mig.common.src.ErrorCheck.errorMsg(ErrorCheck.java:54) 
    at mig.common.src.SendEmail.send(SendEmail.java:71) 
    at mig.common.src.ErrorCheck.errorMsg(ErrorCheck.java:54) 
    at mig.common.src.SendEmail.send(SendEmail.java:71) 

Вот мой ErrorCheck.errorMsg код:

public String errorMsg(String subject, Exception e){  
     String stackTrace = "";     
     try{ 
      StringWriter sw = new StringWriter(); 
        PrintWriter pw = new PrintWriter(sw); 
         e.printStackTrace(pw); 
          stackTrace = sw.toString();   
         stackTrace = stackTrace.replaceAll("\n","<br>");      SendEmail.send("[email protected]","[email protected]",subject,stackTrace);   
       pw.close(); 
       pw = null;  
      sw.close(); 
      sw = null; 

      System.gc(); 

     }catch(Exception ex){ 
     ex.printStackTrace(); 
     }   
    return stackTrace; 
    } 

Просьба сообщить.

Благодаря в ожидании

ответ

0

актуальная проблема была в следующем:

я писал в своем коде:

ErrorCheck ec = new ErrorCheck(); 
String error = ec.error(); 

, а затем звонил в блок catch

ec.errorMsg(error+"SendEmail.send()", e); 

Я удалил из переменной переменных все классы, которые сохраняли ec.error(); и исправлено в моем основном методе класса ErrorMsg из ErrorCheck.java следующим образом:

String finalSubject = error()+subject; 
     StringWriter sw = new StringWriter(); 
       PrintWriter pw = new PrintWriter(sw); 
        e.printStackTrace(pw); 

Теперь его работает отлично

1

Похоже, ваша программа отправить по электронной почте, если у Вас есть ошибка. В этом случае у вас есть ошибка при отправке электронной почты, поэтому у вас есть «бесконечный цикл».

Вы можете увидеть здесь:

at mig.common.src.ErrorCheck.errorMsg(ErrorCheck.java:50) 
at mig.common.src.SendEmail.send(SendEmail.java:71) 
at mig.common.src.ErrorCheck.errorMsg(ErrorCheck.java:54) 
at mig.common.src.SendEmail.send(SendEmail.java:71) 
at mig.common.src.ErrorCheck.errorMsg(ErrorCheck.java:54) 
at mig.common.src.SendEmail.send(SendEmail.java:71) 

И, наконец, вы получите java.lang.StackOverflowError

+0

Вы правы, моя программа отправить по электронной почте, когда есть ошибка и в том случае, если есть ошибка электронная почта взлетает вверх. Этот процесс не находится в цикле, но написан в блоке исключений. если какое-либо исключение поймано, тогда мне будет отправлено письмо. Нет ни одного петли – Ghayel

+0

Я думаю, проблема связана с методом errorMsg – Ghayel

+0

@Ghayel Я написал цикл в кавычках, потому что я не имею в виду настоящий цикл. Это непрямой цикл, потому что send выдает исключение, которое вызовет errorMsg, который вызовет send и т. Д. вы должны попытаться выяснить, что не так, если вы отправляете электронную почту. Я думаю, что есть проблема. – Jens

Смежные вопросы