gpt4 book ai didi

java - 在 Octave 中导入 Java 类

转载 作者:行者123 更新时间:2023-11-30 10:12:37 25 4
gpt4 key购买 nike

我一直难以弄清楚如何做到这一点。来自 the Octave website ,似乎 java 类是通过类路径找到的。 This Stack Overflow answer表明“静态java路径”是“动态java路径”。但是我不确定如何设置静态 java 路径。

在我特别感兴趣的情况下,我正在尝试将 javaplex 包与 Octave 一起使用 - 我已经在 Github 上联系了 javaplex 的作者,他们说如果 Octave 可以加载 java 类,那么我就可以使用它。据我所知,Octave 可以做到这一点。我的困难如下。

我正在使用为 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 接口(interface),我不能只使用 Matlab 代码),所以我需要将它添加到我的 java 类路径中才能访问它。但是我不知道如何在 Octave 中执行此操作。我应该在标识静态类路径的目录中保存某种 .txt 文件吗?关于如何在 Octave 中加载 Java 类的任何一般信息?我很难通过网上提供的信息弄清楚如何做到这一点。向类路径添加内容后我该做什么?

最佳答案

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

坏消息是,您必须将 matlab 语法转换为 Octave 语法。虽然这很简单,但这确实意味着您可能必须在提供的 m 文件中搜索任何 java 调用以及(而不仅仅是在您自己的代码中)并调整语法。 (显然,您可能会想出一个很好的方法来自动化该过程。)

我是这样得到 tutorial 的在 Octave 音程上工作:

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

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

    2. 创建 java 对象、调用 java 方法等的语法在 octave 中与在 matlab 中不同。查看relevant page in the octave manual for details .

因此 api.Plex4.createExplicitSimplexStream() 旨在调用(不带参数)Plex4createExplicitSimplexStream 方法edu.stanford.math.plex4.api 包中的类,将在 Octave 中调用如下:

javaMethod( 'createExplicitSimplexStream', 'edu.stanford.math.plex4.api.Plex4')

然后输出为教程中描述的答案。

说了这么多,请注意,虽然您不能直接导入类或(子)包来避免必须一直重写长包字符串,但 Octave 的 Java 接口(interface) 确实 似乎非常依赖字符串,这意味着将如此长的字符串存储为变量并在必须访问类时重用它们相当容易。所以,例如您可以将字符串 'edu.stanford.math.plex4.' 保存到名为 plex4 的变量中,然后只需调用 javaMethod('createExplicitSimplexStream', [plex4, ' api.Plex4']) 而不是在您的代码中,这使得它稍微不那么麻烦。

玩得开心。

关于java - 在 Octave 中导入 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51802175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com