2014-10-05 46 views
1

我使用Matlab并尝试从中启动Java类。 所以我在Matlab中将java类的路径添加到classpath.txt。然后,我创建了Java类HelloWorld的对象,它完美的作品:Matlab在重新编译时看不到java类中的更改

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

然而,当我在Helloworld更改代码,MATLAB不看到这一点:我需要重新启动与Matlab的改变的代码的工作Helloworld

有没有办法强制Matlab看到Helloworld没有重新启动的变化?

回答

2

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

如果我把它从亚伊尔奥特曼“的MATLAB的Java编程无证秘密”:

只要你没有改变Java类签名编译外当

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

很显然,如果你觉得自己像一个专家Java程序员,有可能的解决办法:

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

但底线是:

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