18

我在 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 的输入参数无关紧要,它总是会挂起,所以在这个例子中我只是给出了 '' 作为输入。

4

3 回答 3

1

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

于 2013-05-18T02:57:14.323 回答
1

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

于 2013-09-18T13:06:16.967 回答
0

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

于 2013-03-21T12:28:27.977 回答