MATLAB зависает, когда я пытаюсь использовать java-пакет jdde, но только в первый раз после перезагрузки системы

Я использую внешний java-пакет jdde в MATLAB. Обратите внимание, что для следующего примера файл DLL, поставляемый с пакетом, должен находиться в пути к библиотеке MATLAB. Способ сделать это зависит от вашей версии MATLAB.

Использование jdde в MATLAB работает нормально, за исключением первого раза после перезагрузки компьютера или выхода из системы / входа в Windows. Когда я запускаю следующий код в первый раз после перезагрузки компьютера, MATLAB останется в режиме занятости навсегда (с 0% CPU). Когда это происходит, я убиваю процесс MATLAB в диспетчере задач и перезагружаю MATLAB. Когда я снова запускаю тот же код, он будет выполняться мгновенно (не занимаясь вечно).

javaaddpath('C:\pretty-tools-JDDE-1.0.2.jar')
a =  com.pretty_tools.dde.client.DDEClientConversation;
a.connect('','');

Подводя итог, приведенный выше код заставит MATLAB оставаться занятым навсегда при первом запуске его после перезагрузки системы или выхода пользователя из системы / входа в систему. Когда я запускаю его снова после уничтожения процесса MATLAB, он будет работать отлично (без зависания MATLAB).

Я видел такое поведение на разных компьютерах и в разных версиях MATLAB (2010 и 2012). Я использую Windows 7 x64.

В примере кода команда a.connect заставляет MATLAB оставаться занятым вечно. Помещение этой команды в блок try/catch не помогло бы, потому что a.connect не вызывает ошибку, просто никогда не продолжается.

Я не уверен, вызвана ли эта проблема MATLAB или пакетом java. Любые идеи, как избавиться от этого поведения, будут высоко ценится.

Примечание: входной аргумент a.connect не имеет значения, он всегда будет зависать, поэтому я просто дал '' в качестве ввода в этом примере.

3 ответа

Решение

Код висит без какой-либо известной причины в методе DdeInitialize(). Новая сборка JDDE-2.0.3 содержит обходной путь для этой проблемы.

Попробуйте выполнить команду add path самостоятельно, чтобы у нее была секунда или две, прежде чем она попытается выполнить код, зависящий от jar. Я обнаружил, что это часто является проблемой с перемежающимися проблемами, связанными с банками в Matlab

Изначально переключитесь в классический режим, чтобы избавиться от этого.

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