Octave 的 DDE 接口

DDE interface for Octave

我在 Windows 7 上使用 Octave 4.0.1(GUI 版本)并尝试与 DDE 服务器通信。我使用与这个问题 Matlab and JDDE 的答案相同的方法。这是我到目前为止所做的:

  1. 下载并解压 JDDE 包到 C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3
  2. 在我的 `prefdir.
  3. 中创建了文件 javaclasspath.txtjavalibrarypath.txt
  4. 已将 C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar 添加到 javaclasspath.txt
  5. 已将 C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3 添加到 javalibrarypath.txt

此外,我还有运行以下命令:

javaaddpath('C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3')

我已经重新启动 Octave 并尝试了以下操作:

>> javaaddpath('C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar')
>> javaclasspath
   STATIC JAVA PATH

      C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar

   DYNAMIC JAVA PATH

      C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar

>>  a = javaObject('com.pretty_tools.dde.client.DDEClientConversation')

error: [java] java.lang.UnsatisfiedLinkError: no JavaDDE in java.library.path
>>  a = javaObject('com.pretty_tools.dde.client.DDEClientConversation')

error: [java] java.lang.NoClassDefFoundError: Could not initialize class com.pretty_tools.dde.client.DDEClientConversation

java class 的描述可以在 here 找到。

我做错了什么?错误消息与 java class/package 相关还是存在更根本的问题?从 Octave 连接到 DDE 服务器有更好的接口吗?我应该补充一点,虽然我精通MATLAB/Octave,但我对java或DDE一无所知。

好吧,经过在互联网上的大量搜索,我设法解决了这个问题,所以我会回答我自己的问题。

java 错误消息 Could not initialize class... 似乎通常表明 JAR 不在 class 路径中(我知道这里不是这种情况)或者class 定义无法找到,即使它在编译时存在(参见示例 "NoClassDefFoundError: Could not initialize class" error)。

查看 JAR class 的目录,我看到包中还有两个 DLL 文件,所以我开始有一种预感 java class JAR 文件中定义的 DLL 文件无法找到,即使它们位于同一目录中。

在 MATLAB 中,有一个叫做 librarypath.txt 的东西,我们可以在其中引用包含必要 DLL 的目录(参见示例 this question)。 Octave 中似乎没有这样的选项(至少 none 我能找到)。

所以(解决方案来了),我尝试将包含 JAR 和 DLL 文件的目录 (C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\) 添加到 Windows 中的 PATH 环境变量,瞧!突然间,我能够 运行 代码没有任何错误!

注意:像我一样刚接触java的小伙伴,不需要把目录添加到动态java路径使用 javaaddpath 因为它已经通过 javaclasspath.txt 存在于静态 java 路径中。不同之处在于每次启动 Octave 时默认加载静态路径,而 javaaddpath 仅临时将目录添加到路径(例如,当只有一个脚本或函数需要时)。请参阅 How to make Java classes available to Octave 以获得更好、更详细的解释。