我有一个简单的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作为我创建的类中的一个线程运行,并发生以下错误。
检测到意外错误 by Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005)在pc = 0x6d9c08b0, pid = 5920,tid = 4788
Java VM:Java HotSpot(TM)客户端VM (10.0-b19混合模式windows-x86) 有问题的框架:
C [jvm.dll + 0x1108b0]
调试后,我发现当我的线程正在调用时发生错误
media = new Media();
(我将我的.jar命名为Media.jar)
这是我的Java代码:
// mediaProperty.java
public class mediaProperty implements Runnable {
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();
}
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();
}
}
// GUI.java
private Thread mediap;
有什么问题?这是我的代码吗?
答案 0 :(得分:3)
我的猜测是MATLAB要求您从一个线程中访问它。你说它适用于单线程应用程序,也许你需要启动一个专用的线程来与MATLAB交互以使其正常工作。