1

我使用 Matlab 并尝试从中启动 java 类。所以我将java类的路径添加到classpath.txtMatlab中。然后我创建了一个 java 类的对象,HelloWorld它完美地工作:

o = HelloWorld;
javaMethod('main', o);

但是,当我Helloworld更改Helloworld.

有没有办法强制 Matlab 在Helloworld不重新启动的情况下查看更改?

4

1 回答 1

2

我猜你尝试了 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 在内存中保留了一个旧类。

于 2014-10-05T09:22:14.730 回答