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
Изначально переключитесь в классический режим, чтобы избавиться от этого.