我一直很难弄清楚该怎么做。从八度的网站,似乎Java类是通过类路径中找到。此堆栈溢出答案指示“静态Java路径”是“动态Java路径”。但是我不确定如何设置静态java路径。
在我感兴趣的特定情况下,我试图将javaplex包与Octave一起使用- 我已经联系了Github上javaplex的作者,他们说如果Octave可以加载Java类,那么我可以使用它。据我所知,八度可以做到这一点。我的困难如下。
我使用的是为Matlab编写的代码,Octave和Matlab与Java交互方式的差异给我带来了麻烦。我必须将Octave设置为
C:\...\javaplex-master\javaplex-master\dist\matlab-examples-4.3.4\matlab_examples
在这里,我load_javaplex在命令窗口中运行命令“ ”,该窗口将运行脚本“ load_javaplex.m”。但是,在此脚本中的行
load_javaplex
load_javaplex.m
javaaddpath('./lib/javaplex.jar'); import edu.stanford.math.plex4.*;
其中“ edu.stanford.math.plex4.*”是一个Java类(本教程还建议显式运行第二行)。
edu.stanford.math.plex4.*
我发现这在Octave中不起作用(至于Java接口,我不能只使用Matlab代码),因此我需要将其添加到我的Java类路径中才能访问它。但是我不知道如何在Octave中做到这一点。是否应该在标识静态类路径的目录中保存某种.txt文件?关于如何在Octave中加载Java类的任何常规信息?我在网上获取信息时遇到困难,无法确定如何执行此操作。将某些内容添加到类路径后该怎么办?
好消息是,将Java指令从matlab语法转换为八度语法非常容易。
坏消息是,您将不得不将matlab语法转换为八度语法。虽然这很简单,它意味着你可能必须寻找在提供M-文件的任何Java调用 ,以及 (在你自己的代码,而不是只)和适应的语法。(显然,您可能想出了一种自动完成该过程的好方法。)
这是使本教程在八度上工作的方式:
matlab_examples
/home/tasos/Desktop/matlab_examples
cd
import
现在您已经准备好api.Plex4.createExplicitSimplexStream()按照教程BUT中的指示运行命令,首先需要注意两点:
api.Plex4.createExplicitSimplexStream()
Octave无法提供从包中导入Java类的方法,因此,所有类调用都必须由包 完全 限定。即包的Plex4类api实际上需要被完全限定为edu.stanford.math.plex4.api.Plex4。您可以通过打开.jar文件并浏览其文件夹结构来确认它是包Plex4的类api,它本身就是包的(子)包edu.stanford.math.plex4。
Plex4
api
edu.stanford.math.plex4.api.Plex4
edu.stanford.math.plex4
在八度音阶中,创建Java对象,调用Java方法等的语法与在MATLAB中不同。有关详细信息,请参见八度音程手册中的相关页面。
因此api.Plex4.createExplicitSimplexStream(),旨在调用(不带参数)包中类的createExplicitSimplexStream方法的,将按八度调用,如下所示:Plex4``edu.stanford.math.plex4.api
createExplicitSimplexStream
Plex4``edu.stanford.math.plex4.api
javaMethod( 'createExplicitSimplexStream', 'edu.stanford.math.plex4.api.Plex4')
然后将其输出为教程中描述的答案。
说了这么多,请注意,虽然您不能import直接对类或(子)包进行保存,以免您一直不得不重写长的包字符串,但是octave的java接口似乎 确实非常 依赖字符串,这意味着相当简单将如此长的字符串存储为变量,并在必须访问类时重用它们。因此,例如,您可以将字符串保存'edu.stanford.math.plex4.'到一个名为的变量中,plex4而只需javaMethod('createExplicitSimplexStream', [plex4, 'api.Plex4'])在您的代码中调用,等等,这使得它的麻烦程度 有所 减轻。
'edu.stanford.math.plex4.'
plex4
javaMethod('createExplicitSimplexStream', [plex4, 'api.Plex4'])
玩得开心。