Java调用Matlab
Matlab版本:2020a打包的jar包
在Linux服务器上,Maltab的运行环境版本是:2017b
这样能直接运行2020a版本打包的jar包吗?#还是说必须版本一致才能运行?
但是调用的时候又出现了问题,代码
Method m1=cls.getDeclaredMethod("plotTest",Object[].class,Object[].class);
System.out.println(cls);//输出"000chen000","chen"字符串两边各加3个"0"字符串
Object obj=cls.newInstance();
m1.setAccessible(true);
m1.invoke(obj);
意思是invoke的参数和你前面Method的参数不匹配,那么问题来了,怎么输入匹配的参数呢????这是一个无参的方法呀。
试着传入null,报空指针错误
参考网上的解答,发现参数需要改成
调用成功。
完整的代码
import java.io.File;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import com.mathworks.toolbox.javabuilder.MWException;
public class MyClassLoader {
public static void main(String[] args) throws Exception {
File file = new File("C:/Users/Administrator/Desktop/plotTest/for_redistribution_files_only/plotTest.jar");//jar包的路径
URL url = file.toURI().toURL();
URLClassLoader loader = new URLClassLoader(new URL[]{url});//创建类加载器
Class<?> cls = loader.loadClass("plotTest.PlotClass");//加载指定类,注意一定要带上类的包名
Method[] m2=cls.getDeclaredMethods();
for(Method m:m2){
System.out.println(m);
}
Object[] a={},b={2};
Method m1=cls.getDeclaredMethod("plotTest",Object[].class);
System.out.println(cls);//输出"000chen000","chen"字符串两边各加3个"0"字符串
Object obj=cls.newInstance();
m1.setAccessible(true);
m1.invoke(obj,(Object)a);
}
}
如果有问题的话,希望留言,一起探讨交流。