2017-07-04 14 views
0

私はこのエラーが発生しており、修正できないのですが、何が間違っているのか分かりません。私はこれにこだわりました。このJAVAスレッドエラーは何ですか?

このエラーは何を意味しますか? com.google.apphosting.api.ApiProxy $ CallNotFoundException:元の要求スレッドもThreadManager

によって作成されたスレッドでもないスレッドでAPI呼び出しmail.Sendを作ることはできませんこれは、完全なスタックトレースは次のとおりです。

org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:587 
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242) 
    at org.apache.commons.mail.Email.send(Email.java:1267) 
    at com.wealthsystems.sim3g.modulo.email.impl.EnviaEmailsThread.process(EnviaEmailsThread.java:123) 
    at com.wealthsystems.dao.hibernate.api.service.WsThreadService.run(WsThreadService.java:55) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call mail.Send in a thread that is neither the original request thread nor a thread created by ThreadManager 
    at com.google.apphosting.api.ApiProxy$CallNotFoundException.foreignThread(ApiProxy.java:800) 
    at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:112) 
    at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:65) 
    at com.google.appengine.api.mail.MailServiceImpl.doSend(MailServiceImpl.java:101) 
    at com.google.appengine.api.mail.MailServiceImpl.send(MailServiceImpl.java:34) 
    at com.google.appengine.api.mail.stdimpl.GMTransport.sendMessage(GMTransport.java:223) 
    at javax.mail.Transport.send(Transport.java:95) 
    at javax.mail.Transport.send(Transport.java:48) 
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232) 
    ... 10 more 

これは、このエラーを発生させる私のコードです:このエラーの意味は何

public static void sendMailApache(String protocol, String host, String port, String userName, String password, 
      String subject, byte[] content, String para, String cc, String co) { 
     try { 
      final Email email = new SimpleEmail(); 
      email.setHostName(host); 
      email.setSmtpPort(Integer.parseInt(port)); 
      email.setTLS(true); 
      email.setSSL(false); 
      email.setAuthenticator(new DefaultAuthenticator(userName, password)); 
      email.setFrom(userName); 
      email.setSubject(subject); 
      email.setCharset(org.apache.commons.mail.Email.ISO_8859_1); 

      for (String str: para.split(";")) { 
       email.addTo(str); 
      } 
      for (String str: cc.split(";")) { 
       email.addCc(str); 
      } 
      for (String str: co.split(";")) { 
       email.addBcc(str); 
      } 
      email.setMsg(content.toString()); 
      email.send(); 
     } catch (EmailException e) { 
      throw new RuntimeException(e); 
     } 
    } 

?私は間違っているの?

+0

このメソッドのスタックトレースが表示されなかったので、あなたは確かですか? – Ravi

+0

エラーはスレッドクラスからのものではありません。このエラーは、送信呼び出しを行うことができるものに制限を加えるライブラリから発生します。あなたが言及した行にブレークポイントを置くことができますか? – efekctive

答えて

0

これは、ThreadManagerで作成されていないスレッドを使用できないことを意味します。あなたの場合、デフォルトでは "不正な"スレッドを使用するScheduledThreadPoolExecutorを使用しようとしています。

ThreadManager(おそらくbackgroundThreadFactory())からThreadFactoryを入力する必要があります。作成されたスレッドは「適切な」スレッドであり、GAEは文句を言うことはありません。

+0

しかし、私はスレッドを使用していません – gFontaniva

+0

確かに(エラーメッセージはあなたにうそをつくことはありません)です。明示的ではないかもしれませんが、それは問題ではありません。 – Kayaman

+0

ScheduledThreadPoolExecutorの使用を有効にするにはどうすればよいですか? – gFontaniva

関連する問題