重新编译时,Matlab没有看到java类的变化

时间:2014-10-05 07:59:20

标签: java matlab class matlab-java

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

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

但是,当我更改Helloworld中的代码时,Matlab看不到:我需要重新启动Matlab才能使用Helloworld的更改代码。

有没有办法强制Matlab查看Helloworld中的更改而不重新启动?

1 个答案:

答案 0 :(得分:2)

我猜你试过Matlab clear classes没有成功

如果我从Yair Altman那里获取它“ MATLAB-Java Programming 的未记载的秘密”:

如果您没有更改java类签名,您可以使用它:

  
    

当在外部重新编译时,Matlab不会自动重新加载Java类     Matlab。要重新加载修改过的Java类,我们需要通过重启Matlab来重启JVM。     对于放置在动态类路径上的类,您可以尝试使用Matlab的 clear(‘java’) 命令,     同时记住它清除所有全局变量的副作用。但是,这并不总是有效(例如,如果类签名已经改变)。

  

显然,如果你觉得自己是一名专业的Java程序员,那么就有可能找到解决方法:

  
    

专家Java程序员可以尝试使用Paul Milenkovic建议的代理类加载器,作为重新启动Matlab或清除Java的替代方法。正如Dan Spielman解释的那样,“粗略的想法是你为你的班级创建一个类加载器,然后通过它来访问它     classloader。在重新编译之后,你杀死了类加载器,然后创建了一个新的实例,然后读取重新编译的类“。

  

但底线是:

  
    

在实践中,我建议在重新编译Java类之后重新启动Matlab ,即使这不是绝对必要的。它可以节省大量令人沮丧的调试并追逐只会因为Matlabkeeps内存中的旧类而发生的错误。