当前位置: 首页 > 面试题库 >

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

费朗
2023-03-14
问题内容

我有一个简单的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作为线程运行,并且发生以下错误。

Java运行时环境检测到意外错误:

EXCEPTION_ACCESS_VIOLATION(0xc0000005)at 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

公共类mediaProperty实现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

私有线程mediap;

如果(mediap == null){
mediap = new Thread(new mediaProperty());
mediap.start();
}

怎么了?是我的代码吗?


问题答案:

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



 类似资料:
  • 我是的新手,我正在尝试使用在eclipse上构建一个应用程序,我遵循了一个教程,并且做了完全相同的操作,该应用程序非常简单,当我试图编译它时,我得到了一堆我甚至不理解的错误: 你能告诉我我错过了什么吗。

  • 当我编译应用程序时,它工作完美,测试也通过,但是如果我在编译的jar中执行java -jat,我在尝试加载jpg资源时遇到以下错误: 这是一门课: 为什么在执行java-jar时一切都很好,但不能正常工作??我不知道该尝试什么,因为在intellij中,当我按下play或debug时,它也能完美工作。 我知道它失败的线路如下: file = new class path resource("/te

  • null 脚本'C:\src\flutter\packages\flutter_tools\gradle\flutter.gradle'行:838 出了什么问题: 任务“:app:CompileFlutterBuildreLease”执行失败。 null null 应用程序:Build.Gradle

  • 我正在Eclipse Luna中使用Java1.8尝试Spark编程示例,并有以下代码- 我使用M2Eclipse构建和创建jar,并使用spark-submit在本地执行jar。jar正在工作并打印正确的输出,但是Eclipse总是将上面提到的行显示为编译错误-参数化 我不明白为什么Eclipse将其显示为编译错误,因为collect调用的返回类型是 非常感谢任何帮助。

  • 我是Java开发的新手,这里有一个问题:我生成了web应用程序 ,然后我添加了文件夹和简单的文件。通过命令在my localhost:8080/manager中,我可以看到我的web应用程序,但是我如何在其中添加我的jar文件呢?

  • 问题内容: 在多线程应用程序中如何使用Hibernate(例如,每个客户端连接在服务器上启动它自己的线程)。 EntityManager应该仅由EntityManagerFactory创建一次,例如: 还是我必须为每个线程以及关闭EM的每个事务重新创建实体? 我的CRUD方法如下所示: 我要不要每次都跑?还是因为每个人都使用自己的缓存创建自己的EntityManager实例而使我陷入麻烦了? 问题