Fehler beim Aufrufen einer kompilierten M-Datei (.jar) in einer Java-App mit mehreren Threads
Ich habe eine einfache M-Datei
function [fRate,Height,Width] = media(filename)
obj = mmreader(filename);
fRate = obj.FrameRate;
Width = obj.Width;
Height = obj.Height;
end
Was ich mit MATLAB Builder JA erfolgreich in eine .jar-Datei kompiliert habe.
Ich habe die .jar-Datei in einer einzigen Thread-Anwendung getestet und sie funktioniert problemlos.
Der Fehler trat auf, als ich ihn in einer GUI-Anwendung mit mehreren Threads verwendete. Ich führe die .jar als Thread in einer der von mir erstellten Klassen aus und der folgende Fehler tritt auf.
Ein unerwarteter Fehler wurde von Java Runtime Environment erkannt:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) bei pc = 0x6d9c08b0, pid = 5920, tid = 4788
Java VM: Java HotSpot (TM) -Client-VM (10.0-b19 Windows-x86 im gemischten Modus) Problematischer Frame:
C [jvm.dll + 0x1108b0]
Nach dem Debuggen habe ich festgestellt, dass der Fehler auftritt, wenn mein Thread aufruftmedia = new Media();
(Ich benenne meine .jar als Media.jar)
Dies ist mein Java-Code:// 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>}
Was ist falsch? Ist es mein Code?