我正在研究一个项目,我希望在Matlab中调用java程序。 java程序的示例结构如下:
mainproj
/ | \
src lib bin
/ \ / \
a b ac bd
Folder" lib"包含jar文件。文件夹ac和bd都有.class的java。文件夹a和b具有java文件+一些其他类文件。我希望运行一个名为" launcher.java"的java文件。在文件夹a下,它使用jar文件并调用文件夹b中可用的java程序,文件夹中包含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
感谢任何建议/帮助。
答案 0 :(得分:0)
如果您提供细节,而不仅仅声称它在Eclipse中有效,那将非常有用。显然,某些在Eclipse设置和Matlab代码之间是不同的,但如果你不共享你的工作设置,我们只能猜出你的Matlab设置有什么问题。
以下是我的猜测;如果是错误的,请包含用于构建和运行Java代码的 exact 命令。如果您不能通过命令行执行此操作,请包含完全 Eclipse构建路径和运行配置。
您正在将mainproj\bin\ac
添加到Java类路径中。这告诉Java将mainproj\bin\ac
视为类文件的根目录。由于您尝试启动类ac.launcher
,因此launcher.class
包目录里面的<{1}}文件添加到Java类路径中的目录。
换句话说,如果你的ac
命令看起来像这样:
java
Java将查找java -cp mainproj\bin\ac ac.launcher
文件。
您的mainproj\bin\ac\ac\launcher.class
文件更有可能位于launcher.class
(因为mainproj\bin\ac
是包),因此ac
应该是添加到Java类路径的目录,所以命令看起来像这样:
mainproj\bin
这将加载java -cp mainproj\bin ac.launcher
文件。
tl; dr 尝试将mainproj\bin\ac\launcher.class
替换为javaaddpath('mainproj\bin\ac')
并阅读how the Java class path works。