我有一个简单的 m 文件
function [fRate,Height,Width] = media(filename)
obj = mmreader(filename);
fRate = obj.FrameRate;
Width = obj.Width;
Height = obj.Height;
end
我已使用 MATLAB Builder JA 成功将其编译为 .jar 文件。
我已经在单线程应用程序中测试了 .jar 文件,它可以正常工作。
当我在多线程 GUI 应用程序中使用它时出现错误。我将 .jar 作为我创建的类之一中的线程运行,并发生以下错误。
An unexpected error has been detected by Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d9c08b0, pid=5920, tid=4788
Java VM: Java HotSpot(TM) Client VM (10.0-b19 mixed mode windows-x86) Problematic frame:
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
<p>private Thread mediap;</p>
if (mediap == null) {<br/>
mediap = new Thread(new mediaProperty());<br/>
mediap.start();<br/>
}
出了什么问题?是我的代码吗?
最佳答案
我的猜测是 MATLAB 要求您从一个线程访问它。您说它在单线程应用程序中工作,也许您需要启动一个专用线程来与 MATLAB 交互才能使其正常工作。
关于java - 在多线程 Java 应用程序中调用已编译的 m 文件(.jar)时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1997585/