2

我正在用 matlab ui 编写一个 java 应用程序。为此,我在 matlab 中使用 java 对象,如下所述:http: //www.mathworks.com/help/techdoc/matlab_external/f4873.html

我想要做的是创建一个这样的matlab函数:

function [] = foo 
  o = javaObject('myObject',parameters...);
  o.memberfunction(parameters...);

我希望 foo 的行为与它是 java 中的 main 函数完全相同。因此,希望在 foo 运行结束时清理所有内容,包括静态类字段。

发生问题的示例:

first run foo:
static fields are set to some values V
second run foo:
static fields are still set to values V 

我尝试清除实例 o 但这并没有解决任何问题(经过一段(相当长的时间),而 matlab 确实清理了实例但显然不是类字段)。

4

2 回答 2

0

“clear java”命令可能会做你想做的事。它将卸载它已加载的所有 Java 类。

在 Java 中,它不会退出导致清除静态数据的 main() 方法;当所有非守护线程都退出时,它是 JVM 准备关闭。main() 执行只是这些线程之一。

将它们转换为实例变量可能会更好。或者更确切地说,获取所有这些静态数据,将它们打包到另一个类中,并让所有实例都携带对该类的单个共享对象的引用。

于 2011-04-26T21:11:49.193 回答
0

如果您使用的是 Swing,您应该能够通过以编程方式关闭主窗口并设置 JFrame.DISPOSE_ON_CLOSE 来破坏 GUI。但是静态成员的目的是在这种情况下坚持下去。静力学的目的是什么?为什么它们不是您的应用程序或主窗口的实例变量?

于 2011-04-26T00:35:47.327 回答