Microsoft Translator API卡住了

时间:2013-07-13 00:54:46

标签: java

我正在使用java Microsoft Translator API并遇到转换器卡住的问题;不会翻译,也不会抛出任何异常。我已经尝试使用Future方法来检测时间,但即使这样也没有做任何事情。代码停止,没有任何例外。这是我的代码。有什么不对的,我该怎么做才能解决它。

import com.memetix.mst.language.Language;
import com.memetix.mst.translate.Translate;

public class Translate
{
 public static String translate (String word)
 {
   Translate.setClientId("My ID");
   Translate.setClientSecret("My Secret");

   ExecutorService executor = Executors.newCachedThreadPool();

   Callable<String> task = new Callable<String>()
   {
    public String call()
    {
     try
     {
      String translatedWord = Translate.execute(currentWord, Language.FRENCH, Language.ENGLISH);
      return translatedWord;
     }
     catch (Exception e)
     {
      return "I don't know";
     }
    }
   };

   Future<String> future = executor.submit(task);
   try
   {
    String result = future.get(5, TimeUnit.SECONDS);
    System.out.println(result);
    return result;
   } 
   catch (Exception e) 
   {
    System.out.println("failed");
    future.cancel(true);
    return "I don't know";
   }
 }

 public static void main (String args[])
 {
  String frenchWord = "Bonjour";
  String englishWord = translate(frenchWord);
  System.out.println(englishWord);
 }
}

当我在调用方法中替换translate行时,一切正常。但是,Translate.execute(...)似乎导致了这个问题。

1 个答案:

答案 0 :(得分:0)

Catch&amp;记录 Throwable ,而不仅仅是例外。那些Executor / ThreadPoolExecutor在记录失败方面表现不佳。错误抛出,这将杀死一个线程&amp;永远不解释原因。

哦,当你发现异常时 - 记录它。否则,下一个编写代码的程序员必须为你的罪行鞭打。即使e.printStackTrace( System.out)也比没有好一千倍。

翻译工作一次吗? &#34;卡住&#34;会暗示它确实如此,但你并不清楚。要清楚。

尝试在调试器中获取堆栈转储,或在控制台中按Ctrl-Break(它不会终止程序)。赔率它不会告诉你什么,因为ClassNotFound已经杀死了线程池,但你也可以试试。