【发布时间】:2014-12-04 22:37:37
【问题描述】:
我正在尝试使用mallet library 运行 LDA 算法。当我尝试使用一组参数运行 LDA 时没问题,但使用另一组参数时出现此错误:
09-Oct-2014 23:50:24.354 INFO [http-nio-8084-exec-127] cc.mallet.topics.ParallelTopicModel.estimate <50> LL/token: -8.73265
09-Oct-2014 23:50:24.657 INFO [http-nio-8084-exec-127] null.null [beta: 0.00795]
09-Oct-2014 23:50:24.657 INFO [http-nio-8084-exec-127] null.null <60> LL/token: -8.6299
09-Oct-2014 23:50:24.957 INFO [http-nio-8084-exec-127] cc.mallet.topics.ParallelTopicModel.estimate <70> LL/token: -8.61982
09-Oct-2014 23:50:25.019 INFO [http-nio-8084-exec-127] null.null [beta: 0.00583]
09-Oct-2014 23:50:25.263 INFO [http-nio-8084-exec-127] cc.mallet.topics.ParallelTopicModel.estimate <80> LL/token: -8.89656
09-Oct-2014 23:50:25.402 INFO [http-nio-8084-exec-127] null.null [beta: 0.00484]
java.lang.ArrayIndexOutOfBoundsException: -1 at
cc.mallet.topics.WorkerRunnable.sampleTopicsForOneDoc(WorkerRunnable.java:489) at
cc.mallet.topics.WorkerRunnable.run(WorkerRunnable.java:275) at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at
java.util.concurrent.FutureTask.run(FutureTask.java:266) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at
java.lang.Thread.run(Thread.java:745) java.lang.ArrayIndexOutOfBoundsException: -1 at
cc.mallet.topics.WorkerRunnable.sampleTopicsForOneDoc(WorkerRunnable.java:489) at
cc.mallet.topics.WorkerRunnable.run(WorkerRunnable.java:275) at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at
java.util.concurrent.FutureTask.run(FutureTask.java:266) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at
java.lang.Thread.run(Thread.java:745)
我的代码如下:
try{
//call some function from library
} catch(Exception e){
System.out.println("LDA Exception")
}
如何捕获由外部 jar 引起的异常?我有this 的问题,但它对我不起作用。有什么想法吗?
编辑:
我的项目是一个在 apache tomcat 服务器上运行的 RESTful Web 服务。我尝试在 dopost 函数中调用 lda 算法。
编辑 2
Mallet 是一个开源库。所以我尝试阅读代码,我找到了下面的代码。
public class ParallelTopicModel implements Serializable {
int numThreads = 2;
public void estimate() throws IOException {
WorkerRunnable[] runnables = new WorkerRunnable[numThreads];
for (int thread = 0; thread < numThreads; thread++) {
runnables[thread] = new WorkerRunnable(numTopics, alpha, alphaSum, beta,
random, data, runnableCounts,
runnableTotals, offset, docsPerThread);
//some code
}
}
}
public class WorkerRunnable implements Runnable {
public void run() {
try {
//some code
} catch (Exception e) {
e.printStackTrace();
}
}
}
我的网络服务:
@POST
@Produces("application/xml")
public String getXml(@FormParam("xmlinput") String xmlinput) throws Exception {
try {
//call estimate function in ParallelTopicModel class
//return an xml;
} catch (Exception e) {
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<modelingOutput>null</modelingOutput>";
}
那么如何处理在我的 Web 服务中产生 WorkRunnable 类的异常。我想把 xml 变成
`空
【问题讨论】:
-
你写的代码有什么问题?那不赶上执行吗?
-
我的代码捕获所有异常。这个异常不是来自我的代码。它来自 jar 文件
-
这不只是一个日志语句吗?您的代码是否因为异常冒泡而停止运行,或者您只是因为外部 jar 打印了一些东西而感到困扰?
-
因为外部jar打印错误。
-
如果它打印到 System.out,您无能为力。异常永远不会进入您的代码。如果 jar 记录信息,为什么会出现问题?您可以随时将您的
System.out重定向到不同的PrintStream,但我建议您不要这样做。这也意味着您将无法再自己使用控制台。 编辑:Mallet 似乎使用java.util.logging,因此您可以通过调整根记录器来禁用控制台输出:stackoverflow.com/questions/2533227/…
标签: java exception-handling mallet