当我尝试使用java包jdde时,MATLAB挂起,但仅在系统重启后第一次使用

时间:2012-10-16 09:06:37

标签: java matlab dll jar dde

我在MATLAB中使用外部java包jdde。请注意,对于以下示例,程序包附带的DLL文件需要位于MATLAB库路径中。执行此操作的方法因您的MATLAB版本而异。

在MATLAB中使用jdde工作正常,除了我重新启动计算机或在Windows中注销/登录后的第一次。当我在计算机重启后第一次运行以下代码时,MATLAB将永远保持繁忙模式(CPU为0%)。发生这种情况时,我会在任务管理器中终止MATLAB进程并重新启动MATLAB。当我再次运行相同的代码时,它将立即执行(不会永远保持忙碌)。

javaaddpath('C:\pretty-tools-JDDE-1.0.2.jar')
a =  com.pretty_tools.dde.client.DDEClientConversation;
a.connect('','');

总而言之,上述代码将导致MATLAB在系统重启或用户注销/登录后第一次运行时永远保持忙碌状态。当我在杀死MATLAB过程后再次运行它时,它将完美地工作(不要挂起MATLAB)。

我在不同的计算机和不同版本的MATLAB(2010和2012)中看到过这种行为。我正在使用Windows 7 x64。

在代码示例中,a.connect命令是导致MATLAB永远保持忙碌的命令。将此命令放在try / catch块中无济于事,因为a.connect不会导致错误,它永远不会继续。

我不确定这个问题是由MATLAB还是java包引起的。 任何想法如何摆脱这种行为将不胜感激。

注意:a.connect的输入参数无关紧要,它会一直挂起,所以我只是在这个例子中给出了''作为输入。

3 个答案:

答案 0 :(得分:1)

尝试单独运行add path命令,以便在尝试执行依赖于jar的代码之前有一两秒。我发现这通常是与Matlab中的jar有间歇性问题的问题

答案 1 :(得分:1)

代码在DdeInitialize()方法中没有任何已知原因而挂起。新版本JDDE-2.0.3包含此问题的解决方法。

答案 2 :(得分:0)

最初切换到经典模式,这样你就可以摆脱它。