проблема очистки с использованием классов Java в Matlab - PullRequest
2 голосов
/ 26 апреля 2011

Я пишу Java-приложение с интерфейсом Matlab.Для этого я использую Java-объекты в Matlab, как описано здесь: http://www.mathworks.com/help/techdoc/matlab_external/f4873.html

Что я хочу сделать, так это создать функцию Matlab следующим образом:

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

Я хочу, чтобы foo вел себя точно так же, кактак же, как если бы это была основная функция в Java.Поэтому хочу, чтобы все было очищено в конце цикла 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 очистил экземпляр, но, очевидно, не в полях класса).

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Команда "clear java", вероятно, сделает то, что вы хотите. Выгрузит все загруженные классы Java.

В Java не происходит выхода из метода main (), который приводит к очистке статики; JVM готовится к закрытию, когда все потоки, не являющиеся демонами, закрылись. Выполнение main () - только один из этих потоков.

Вам, вероятно, повезет, если вы конвертируете их в переменные экземпляра. Или, скорее, взяв все эти статические элементы, упаковав их в другой класс и заставив все ваши экземпляры содержать ссылку на один общий объект этого класса.

0 голосов
/ 26 апреля 2011

Если вы используете Swing, вы сможете уничтожить графический интерфейс, программно закрыв главное окно и установив JFrame.DISPOSE_ON_CLOSE. Но цель статических членов состоит в том, чтобы сохраняться в подобных ситуациях. Какова цель статики; почему они не являются экземплярами переменных вашего приложения или главного окна?

...