Błąd podczas wywoływania skompilowanego pliku m (.jar) w wielowątkowej aplikacji Java
Mam prosty plik m
function [fRate,Height,Width] = media(filename)
obj = mmreader(filename);
fRate = obj.FrameRate;
Width = obj.Width;
Height = obj.Height;
end
Które udało mi się skompilować przy użyciu MATLAB Builder JA w pliku .jar.
Przetestowałem plik .jar w aplikacji z jednym wątkiem i działa bez problemu.
Błąd pojawił się, gdy używam go w wielowątkowej aplikacji GUI. Uruchamiam .jar jako wątek w jednej z utworzonej klasy i pojawia się następujący błąd.
Java Runtime Environment wykrył nieoczekiwany błąd:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) na pc = 0x6d9c08b0, pid = 5920, tid = 4788
Java VM: Java HotSpot (TM) Client VM (10.0-b19 tryb mieszany windows-x86) Problematyczna ramka:
C [jvm.dll + 0x1108b0]
Po debugowaniu odkryłem, że błąd występuje, gdy mój wątek dzwonimedia = new Media();
(Nazywam mój .jar jako Media.jar)
To jest mój kod 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>}
Co jest nie tak? Czy to mój kod?