Matlab не видит изменений в классе Java при перекомпиляции

Я работаю с Matlab и пытаюсь запустить класс Java из него. Поэтому я добавляю путь к классу Java в classpath.txt в Matlab. Затем я создаю объект класса Java HelloWorld и работает отлично

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

Тем не менее, когда я изменяю код в HelloworldMatlab не видит этого: мне нужно перезапустить Matlab для работы с измененным кодом Helloworld,

Есть ли способ заставить Matlab увидеть изменения в Helloworld без перезагрузки?

1 ответ

Решение

Я думаю, вы пробовали Matlab clear classes безуспешно

Если я возьму его у Яира Альтмана " Недокументированные секреты программирования на MATLAB-Java ":

При условии, что вы не изменили сигнатуру класса java, вам, возможно, удастся сойти с рук:

Классы Java не перезагружаются автоматически Matlab при перекомпиляции вне Matlab . чтобы перезагрузить модифицированный класс Java, нам нужно перезапустить JVM, перезапустив Matlab . Для классов, размещенных на динамическом пути к классам, вы можете попробовать Matlab's clear(‘java’) команда, помня свой побочный эффект очистки всех глобалов. Однако это не всегда работает (например, если сигнатура класса изменилась).

По-видимому, если вы чувствуете себя опытным программистом Java, есть потенциальные обходные пути:

Опытные Java-программисты могут попытаться использовать предложение Пола Миленковича для загрузчика прокси-классов в качестве альтернативы перезапуску Matlab или очистке Java . как объясняет Дэн Спилман, "грубая идея заключается в том, что вы создаете загрузчик классов для своего класса, а затем получаете к нему доступ через загрузчик классов. после перекомпиляции вы убиваете загрузчик классов, а затем создаете его новый экземпляр, который затем читает перекомпилированный класс ".

Но суть заключается в следующем:

На практике я предлагаю перезапустить Matlab после перекомпиляции классов Java, даже если это не является строго обязательным. Это может сэкономить много разочаровывающих ошибок отладки и погони, которые происходят только потому, что Matlab хранит старый класс в памяти.

Другие вопросы по тегам