Octave 的 DDE 接口
DDE interface for Octave
我在 Windows 7 上使用 Octave 4.0.1(GUI 版本)并尝试与 DDE 服务器通信。我使用与这个问题 Matlab and JDDE 的答案相同的方法。这是我到目前为止所做的:
- 下载并解压 JDDE 包到
C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3
- 在我的 `prefdir.
中创建了文件 javaclasspath.txt
和 javalibrarypath.txt
- 已将
C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar
添加到 javaclasspath.txt
。
- 已将
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 以获得更好、更详细的解释。
我在 Windows 7 上使用 Octave 4.0.1(GUI 版本)并尝试与 DDE 服务器通信。我使用与这个问题 Matlab and JDDE 的答案相同的方法。这是我到目前为止所做的:
- 下载并解压 JDDE 包到
C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3
- 在我的 `prefdir. 中创建了文件
- 已将
C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar
添加到javaclasspath.txt
。 - 已将
C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3
添加到javalibrarypath.txt
javaclasspath.txt
和 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 以获得更好、更详细的解释。