我使用 Matlab 并尝试从中启动 java 类。所以我将java类的路径添加到classpath.txt
Matlab中。然后我创建了一个 java 类的对象,HelloWorld
它完美地工作:
o = HelloWorld;
javaMethod('main', o);
但是,当我Helloworld
更改Helloworld
.
有没有办法强制 Matlab 在Helloworld
不重新启动的情况下查看更改?
我使用 Matlab 并尝试从中启动 java 类。所以我将java类的路径添加到classpath.txt
Matlab中。然后我创建了一个 java 类的对象,HelloWorld
它完美地工作:
o = HelloWorld;
javaMethod('main', o);
但是,当我Helloworld
更改Helloworld
.
有没有办法强制 Matlab 在Helloworld
不重新启动的情况下查看更改?
我猜你尝试了 Matlabclear classes
没有成功
如果我从 Yair Altman “未记录的 MATLAB-Java 编程秘密”中获取它:
如果您没有更改 java 类签名,您可能能够摆脱它:
在 Matlab 外部重新编译时,Java 类不会由 Matlab 自动重新加载。要重新加载修改后的 Java 类,我们需要通过重启 Matlab 来重启 JVM。对于放置在动态类路径上的类,您可以尝试使用 Matlab 的
clear(‘java’)
命令,同时记住它清除所有全局变量的副作用。但是,这并不总是有效(例如,如果类签名已更改)。
显然,如果您觉得自己是一名专业的 Java 程序员,有一些潜在的解决方法:
专业的 Java 程序员可以尝试使用 Paul Milenkovic 对代理类加载器的建议,作为重新启动 Matlab 或清除 Java 的替代方法。正如 Dan Spielman 解释的那样,“粗略的想法是为你的类创建一个类加载器,然后通过类加载器访问它。重新编译后,你杀死类加载器,然后创建它的一个新实例,然后读取重新编译的类”。
但底线是:
在实践中,我建议在 Java 类重新编译后重新启动 Matlab,即使这不是绝对必要的。它可以节省很多令人沮丧的调试和追踪错误,因为 Matlab 在内存中保留了一个旧类。