我有一个 Matlab 代码,它最终计算出索引向量。我使用库编译器将 matlab 代码编译为 java 包 .jar 文件。我导出了 jar 文件以便在我的主 Java 项目中运行它。包类的名称是 Epidemic。我导入了 jar 文件(将其添加为外部 jar)。在主代码中,我尝试创建我的类的对象(在 jar 文件中)。我已经将类的名称定义为 Epidemic。因此,我的代码:
import epidemic.Epidemic;
...
public static void main(String[] args) throws IOException {
List<Double> list1 = new ArrayList<Double>();
List<Double> list2 = new ArrayList<Double>();
Epidemic object = new Epidemic();
object.epidemic(list1, list2);
System.out.println(list1);
}
我使用项目->库右键单击添加外部 jar 将 .jar 文件添加到 java 项目。 Netbeans 自动检测对象的方法。但是我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError:
com/mathworks/toolbox/javabuilder/internal/MWComponentInstance
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at twittertrendsetters.TwitterTrendSetters.main(TwitterTrendSetters.java:70)
Caused by: java.lang.ClassNotFoundException:
com.mathworks.toolbox.javabuilder.internal.MWComponentInstance
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 13 more
这里有什么问题呢?我是否应该添加其他东西才能使罐子正常工作?
编辑:我将位于 MATLABROOT/toolbox/javabuild/jar/javabuild.jar 中的 .jar 文件添加到我的类路径和它似乎可以工作的类中。现在我面临另一个问题。当我打印基于 html 文档的 list1 并获取 matlab .m 文件的输出时,我得到一个空的 arrayList。 Matlab 函数返回一个双精度数组 Nx1。我怎样才能正确地将它解析为java arrayList。
我的matlab代码:
function eP = epidemic() // zero input
graph = dlmread('graph.edges'); //a graph
graph_ids=importdata('cms_V3_id.txt'); // indexes of the graph
for index = 1:length(graph)
grph(index,1) = find(graph_ids == graph(index,1));
grph(index,2) = find(graph_ids == graph(index,2));
end
grph(:,3)= graph(:,3);
grph(end + 1, :, :) = [max(max(grph)) max(max(grph)) 1 ];
grph = spconvert(grph);
[S, prev] = brutte_topk2(grph, 3707); //function approximate pagerank result
eP = graph_ids(S); // returning a list of indexes
我尝试使用你的方法。我创建一个 OBject 表并将结果解析到其中。
Epidemic object = new Epidemic();
Object[] result;
result = object.epidemic(1);
System.out.println((Double)result[0]);
但是我得到 javabuilder.MWNumericArray无法转换为java.lang.Double。当我只打印结果时