我正在用MATLAB编写COMSOL (一个物理模拟软件)的脚本。我的循环相当大,运行了8000次模拟。我遇到了以下问题。
>> fig2b
Error using fig2b (line 17)
Java exception occurred:
java.lang.NullPointerException
at com.comsol.clientapi.engine.APIEngine.runMethod(Unknown Source)
at com.comsol.clientapi.engine.APIEngine.runMethod(Unknown Source)
at com.comsol.clientapi.impl.SolverSequenceClient.runAll(Unknown Source)
2014-05-10 22:18:37.692:WARN:oejuc.AbstractLifeCycle:FAILED qtp633622505{8<=5<=6/254,5}: java.lang.InterruptedException: sleep interrupted
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at org.eclipse.jetty.util.thread.QueuedThreadPool.doStop(QueuedThreadPool.java:139)
at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89)
at org.eclipse.jetty.util.component.AggregateLifeCycle.doStop(AggregateLifeCycle.java:107)
at org.eclipse.jetty.websocket.WebSocketClientFactory.doStop(WebSocketClientFactory.java:221)
at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89)
at com.comsol.client.interfaces.v.onClose(Unknown Source)
at org.eclipse.jetty.websocket.WebSocketConnectionRFC6455.closeIn(WebSocketConnectionRFC6455.java:332)
at org.eclipse.jetty.websocket.WebSocketConnectionRFC6455.handle(WebSocketConnectionRFC6455.java:257)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Unknown Source)
2014-05-10 22:18:37.693:WARN:oejuc.AbstractLifeCycle:FAILED org.eclipse.jetty.websocket.WebSocketClientFactory@4af2aad3: java.lang.InterruptedException: sleep interrupted
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at org.eclipse.jetty.util.thread.QueuedThreadPool.doStop(QueuedThreadPool.java:139)
at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89)
at org.eclipse.jetty.util.component.AggregateLifeCycle.doStop(AggregateLifeCycle.java:107)
at org.eclipse.jetty.websocket.WebSocketClientFactory.doStop(WebSocketClientFactory.java:221)
at org.eclipse.jetty.util.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:89)
at com.comsol.client.interfaces.v.onClose(Unknown Source)
at org.eclipse.jetty.websocket.WebSocketConnectionRFC6455.closeIn(WebSocketConnectionRFC6455.java:332)
at org.eclipse.jetty.websocket.WebSocketConnectionRFC6455.handle(WebSocketConnectionRFC6455.java:257)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Unknown Source)看到2014-05-10 22:18:37.692:WARN:oejuc.AbstractLifeCycle:FAILED qtp633622505{8<=5<=6/254,5}:这条线,我想这是由于一次运行了太多的模拟所造成的。因此,我尝试在4次运行中分别运行8000次模拟,每次运行包含2000次模拟。然后,有时运行是成功的,但有时运行失败的一半与相同的错误!使我感到困惑的是,我没有接触到代码后,它失败了。然后,我重新运行它,它工作!
根据上面的观察,我认为这与COMSOL无关,而是与java或jetty或其他相关。专家们能给我一些可能的解决办法或原因吗?
发布于 2014-05-15 11:57:26
我看到你要求解决或原因,我不知道原因,但我可能有解决办法。
根据我的经验,这些java错误通常发生在以下情况之一:
visdiff)以下是我发现有用的解决方案:
1.忽略错误:这听起来可能很奇怪,但特别是在进行长时间计算时,Java通常是用红色打印的,而不会中断代码。基本上,在这种情况下,等待代码完成并保存其结果是我的首选解决方案。但是,一旦您开始使用UI单击或键入,红色文本可能会变得非常烦人,所以在运行完成后,我通常会重新启动matlab。
2.重新启动Matlab:当我没有运行一些东西时,这个问题很少发生。在这种情况下,我通常只是重新启动,这通常足以使错误消失。
禁用3.禁用:虽然我还没有为这些错误感到足够的麻烦,但不使用当然可以使用它。这可以通过调用带有-nojvm标志的matlab来实现。如果禁用java,则应防止任何java错误。如果它们还会发生,问题可能是在您调用的外部程序中。
4.捕获错误:还没有为Java尝试过这种方法,但是它可能会工作。通常,任何打断matlab代码的内容都应该被捕获为错误。您可以在最重要的循环中放置一个try - catch块,并且可以在错误的情况下工作。然而,这确实是一项令人绝望的措施,应该被视为最后的手段。
结论
如果您有与我相同的错误类型,并且两次运行相同的代码并不会重现它们,那么只需考虑它们是一个可以忽略的警告。毕竟,java只用于UI,而不是用于计算。但是,如果您真的被它们困住了,那么可能是时候向mathworks发送支持请求了。
https://stackoverflow.com/questions/23593335
复制相似问题