我正在使用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(...)似乎导致了这个问题。
答案 0 :(得分:0)
Catch&amp;记录 Throwable ,而不仅仅是例外。那些Executor / ThreadPoolExecutor在记录失败方面表现不佳。错误抛出,这将杀死一个线程&amp;永远不解释原因。
哦,当你发现异常时 - 记录它。否则,下一个编写代码的程序员必须为你的罪行鞭打。即使e.printStackTrace( System.out)
也比没有好一千倍。
翻译工作一次吗? &#34;卡住&#34;会暗示它确实如此,但你并不清楚。要清楚。
尝试在调试器中获取堆栈转储,或在控制台中按Ctrl-Break(它不会终止程序)。赔率它不会告诉你什么,因为ClassNotFound已经杀死了线程池,但你也可以试试。