【问题标题】:Calling java class file (that uses jar file and other class files) in MATLAB在 MATLAB 中调用 java 类文件(使用 jar 文件和其他类文件)
【发布时间】:2015-11-24 17:59:18
【问题描述】:

我正在做一个项目,我希望在 Matlab 中调用 java 程序。 java程序的示例结构如下:

                 mainproj
                /    |   \
               src   lib  bin
               / \        / \ 
              a    b     ac   bd

文件夹“lib”包含 jar 文件。文件夹 ac 和 bd 有 java 的 .classes。文件夹 a 和 b 有 java 文件 + 一些其他类文件。我希望在文件夹a下运行一个名为“launcher.java”的java文件,它使用jar文件并调用文件夹b中可用的java程序,该程序在文件夹ac中有launcher.class文件。

我很困惑如何成功调用这个程序。我在网上找到了一些解决方案,但它们对我不起作用。 Calling Java from MATLAB?, Calling Java from MATLAB, Is it worth to call java from matlab?, Calling Java from Matlab is very slow.

launcher.java文件如下:

package ac;
import....
public class launcher
{
....
....
public static void main(String[] args) { run();}
public static void run() {......}
}

我的表现如下:

javaaddpath('mainproj\lib\x.jar')
javaaddpath('mainproj\bin\ac')
import mainproj.*;
import mainproj.lib.*;
import mainproj.bin.*;
import mainproj.bin.ac.*;
import mainproj.bin.bd.*;

l = launcher;
javaMethod('main', l);

[我希望在文件夹中调用launcher.class的main,因为它会自动调用run()方法,而run()会调用文件夹bd中的其他类文件]

我得到的输出错误是:No class launcher can be located or no methods for class

感谢任何建议/帮助。

【问题讨论】:

  • 您是否确认可以直接从命令行、在同一目录中并使用您希望 Matlab 使用的相同设置运行您的 Java 程序?
  • @dimo14 是的!我已经检查了这一切。我在一个目录中检查了一个简单的程序,正在运行,但是上面提到的不起作用。
  • 您可以将您运行的命令行添加到您的问题中吗?我有一个理论,但需要知道你是如何成功运行它的。
  • 上面已经添加了,我是如何尝试从 MATLAB 中的命令行运行的。
  • 对,我看到了 Matlab 代码。我说的是命令行(即$ java ... ac.launcher ...)。您是否验证过它可以在命令行上运行?如果是这样,确切的命令是什么?如果没有,请先编译 (javac) 并直接运行 (java) 您的 Java 程序,无需 Matlab。

标签: java matlab


【解决方案1】:

如果您提供细节,而不是仅仅声称它在 Eclipse 中有效,那将非常有帮助。显然有些东西在你的 Eclipse 设置和你的 Matlab 代码之间是不同的,但是如果你不分享你的工作设置,我们只能猜测你的 Matlab 设置有什么问题。

以下是我的猜测;如果有错误,请包含用于构建和运行 Java 代码的 exact 命令。如果您无法通过命令行执行此操作,请包含 exact Eclipse 构建路径和运行配置。


您正在将mainproj\bin\ac 添加到Java 类路径中。这告诉 Java 将 mainproj\bin\ac 视为类文件的根目录。由于您正在尝试启动类ac.launcher,因此ac 包目录inside 中应该有一个launcher.class 文件,该目录已添加到Java 类路径中。

换句话说,如果你的java 命令看起来像这样:

java -cp mainproj\bin\ac ac.launcher

Java 将查找 mainproj\bin\ac\ac\launcher.class 文件。

您的launcher.class 文件更有可能位于mainproj\bin\ac 中(因为ac 是包),因此mainproj\bin 应该是添加到Java 类路径的目录,因此命令如下所示:

java -cp mainproj\bin ac.launcher

这将加载一个mainproj\bin\ac\launcher.class 文件。

tl;dr 尝试将 javaaddpath('mainproj\bin\ac') 替换为 javaaddpath('mainproj\bin') 并继续阅读 how the Java class path works

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 2014-10-04
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多