Ошибка при вызове скомпилированного m-файла (.jar) в многопоточном приложении Java
У меня простой м-файл
function [fRate,Height,Width] = media(filename)
obj = mmreader(filename);
fRate = obj.FrameRate;
Width = obj.Width;
Height = obj.Height;
end
Который я успешно скомпилировал с помощью MATLAB Builder JA в файл .jar.
Я протестировал файл .jar в однопоточном приложении, и он работает без проблем.
Ошибка возникла, когда я использую его в многопоточном приложении с графическим интерфейсом. Я запускаю .jar как поток в одном из созданных мною классов, и возникает следующая ошибка.
Непредвиденная ошибка была обнаружена Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) при pc = 0x6d9c08b0, pid = 5920, tid = 4788
Java VM: клиентская виртуальная машина Java HotSpot (TM) (смешанный режим 10.0-b19 windows-x86) Проблемный кадр:
C [jvm.dll + 0x1108b0]
После отладки я обнаружил, что ошибка возникает, когда мой поток вызываетmedia = new Media();
(Я называю мой .jar как Media.jar)
Это мой код Java:// mediaProperty.java
<p>public class mediaProperty implements Runnable {</p><pre><code>public void mediaProperty() {
Matlab_options matlab = new Matlab_options();
Object[] mediaProp = null;
java.util.List lstMedia = new ArrayList();
Media media = null;
try {
media = new Media();
...
mediaProp = media.media(3, lstMedia);
...
} catch (Exception p) {
System.out.println("Exception: " + p.toString());
} finally {
MWArray.disposeArray(mediaProp);
if (media != null) {
media.dispose();
}
}
}
public void run() {
mediaProperty();
}
</code></pre>
}<br>
// GUI.java
private Thread mediap;
if (mediap == null) {<br>mediap = new Thread(new mediaProperty());<br>mediap.start();<br>}
Что случилось? Это мой код?