gpt4 book ai didi

java - 在多线程 Java 应用程序中调用已编译的 m-file(.jar) 时出错

转载 作者:行者123 更新时间:2023-12-04 07:00:09 28 4
gpt4 key购买 nike

我有一个简单的 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


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();
}
}

// GUI.java

private Thread mediap;



if (mediap == null) {

mediap = new Thread(new mediaProperty());

mediap.start();

}

怎么了?是我的代码吗?

最佳答案

我的猜测是 MATLAB 要求您从一个线程访问它。你说它在单线程应用程序中工作,也许你需要启动一个专用线程来与 MATLAB 交互以使其正常工作。

也可以看看
Thread safety of Matlab engine API

关于java - 在多线程 Java 应用程序中调用已编译的 m-file(.jar) 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1997585/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com