在Octave中导入Java类

时间:2018-08-11 17:35:21

标签: java matlab octave

我一直很难弄清楚该怎么做。在the Octave website中,似乎可以通过类路径找到Java类。 This Stack Overflow answer表示“静态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”。但是,在此脚本中的行是

javaaddpath('./lib/javaplex.jar');

import edu.stanford.math.plex4.*;

其中“ edu.stanford.math.plex4.*”是一个Java类(tutorial还建议明确运行第二行)。

我发现这在Octave中不起作用(对于Java接口,我不能只使用Matlab代码),因此我需要将其添加到我的java类路径中以进行访问。但是我不知道如何在Octave中做到这一点。我应该在标识静态类路径的目录中保存某种.txt文件吗?关于如何在Octave中加载Java类的任何常规信息?我在网上获取可用信息时遇到困难,无法确定如何执行此操作。将一些内容添加到类路径后该怎么办?

1 个答案:

答案 0 :(得分:1)

好消息是,将Java指令从matlab语法转换为八度语法非常容易。

坏消息是,您将不得不将matlab语法转换为八度语法。尽管这很简单,但是这确实意味着您可能还必须在提供的m文件 中查找所有Java调用(而不只是在您自己的代码中)并调整语法。 (显然,您可能想出了一种使流程自动化的好方法。)

这是让tutorial在八度音阶上工作的方式:

  • 我下载了matlab_examples zip文件,并按照说明进行了解压缩(我解压缩了桌面上的文件夹,即计算机上的文件夹,这导致了文件夹/home/tasos/Desktop/matlab_examples
  • 我打开八度,然后cd进入该目录
  • 打开load_javaplex.m文件并删除所有import语句,然后运行它以“初始化” javaplex。
  • 现在您已经准备好按照教程BUT中的指示运行命令api.Plex4.createExplicitSimplexStream(),首先需要注意两件事:

    1. Octave没有提供从包中导入Java类的方法,因此,您的所有类调用都必须由包完全限定。即实际上,Plex4包中的api类必须完全合格为edu.stanford.math.plex4.api.Plex4。通过打开.jar文件并探索其文件夹结构,可以确认Plex4api包的类,它本身是edu.stanford.math.plex4包的(子)包。

    2. 用于创建Java对象,调用Java方法等的语法在八度音阶中与在MATLAB中不同。请参见relevant page in the octave manual for details

因此,api.Plex4.createExplicitSimplexStream()(旨在调用(无任何参数)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']),依此类推,因此稍微麻烦一些。

玩得开心。