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

标签 java matlab

我有一个简单的 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 交互才能使其正常工作。

另请参阅
Thread safety of Matlab engine API

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

相关文章:

excel - 如何使用matlab清除excel中的现有图形?

我们能知道mxRealloc或mxMalloc返回的指针的长度吗?

algorithm - 二进制搜索与一次固定一个数字

image - 自动查找二值图像中物体的长度(MATLAB)

java - 文本字段不响应组合框选择

java - 使用 Java5 针对 XSD 进行验证时出现问题

java - 如何在Java中创建更多对象?

java - 如何在更高版本的 kitkat API 中保持屏幕常亮?

java - 计算数组中某个元素出现的次数

matlab - 在 MatLab 中使用一个句柄访问多个属性