小编典典

在Octave中导入Java类

java

我一直很难弄清楚该怎么做。从八度的网站,似乎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”。但是,在此脚本中的行

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

import edu.stanford.math.plex4.*;

其中“
edu.stanford.math.plex4.*”是一个Java类(本教程还建议显式运行第二行)。

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


阅读 402

收藏
2020-11-26

共1个答案

小编典典

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

坏消息是,您将不得不将matlab语法转换为八度语法。虽然这很简单,它意味着你可能必须寻找在提供M-文件的任何Java调用 ,以及
(在你自己的代码,而不是只)和适应的语法。(显然,您可能想出了一种自动完成该过程的好方法。)

这是使本教程在八度上工作的方式:

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

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

    2. 在八度音阶中,创建Java对象,调用Java方法等的语法与在MATLAB中不同。有关详细信息,请参见八度音程手册中相关页面

因此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'])在您的代码中调用,等等,这使得它的麻烦程度 有所 减轻。

玩得开心。

2020-11-26