从 Matlab 创建的 jar 文件返回值

2024-02-12

我有一个 Matlab 代码,它最终计算出索引向量。我使用库编译器将 matlab 代码编译为 java 包 .jar 文件。我导出了 jar 文件以便在我的主 Java 项目中运行它。包类的名称是 Epidemic。我导入了 jar 文件(将其添加为外部 jar)。在主代码中,我尝试创建我的类的对象(在 jar 文件中)。我已经将类的名称定义为 Epidemic。因此,我的代码:

import epidemic.Epidemic;
...
public static void main(String[] args) throws IOException {

    List<Double> list1 = new ArrayList<Double>();
    List<Double> list2 = new ArrayList<Double>();

    Epidemic object = new Epidemic(); 
    object.epidemic(list1, list2);
    System.out.println(list1);
}

我使用项目->库右键单击添加外部 jar 将 .jar 文件添加到 java 项目。 Netbeans 自动检测对象的方法。但是我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError:  
com/mathworks/toolbox/javabuilder/internal/MWComponentInstance
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at twittertrendsetters.TwitterTrendSetters.main(TwitterTrendSetters.java:70)
Caused by: java.lang.ClassNotFoundException:
com.mathworks.toolbox.javabuilder.internal.MWComponentInstance
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 13 more

这里有什么问题呢?我是否应该添加其他东西才能使罐子正常工作?

编辑:我将位于 MATLABROOT/toolbox/javabuild/jar/javabuild.jar 中的 .jar 文件添加到我的类路径和它似乎可以工作的类中。现在我面临另一个问题。当我打印基于 html 文档的 list1 并获取 matlab .m 文件的输出时,我得到一个空的 arrayList。 Matlab 函数返回一个双精度数组 Nx1。我怎样才能正确地将它解析为java arrayList。

我的matlab代码:

function eP = epidemic() // zero input

graph = dlmread('graph.edges'); //a graph
graph_ids=importdata('cms_V3_id.txt');  // indexes of the graph

for index = 1:length(graph)
 grph(index,1) = find(graph_ids == graph(index,1));
 grph(index,2) = find(graph_ids == graph(index,2));
end
grph(:,3)= graph(:,3);

grph(end + 1, :, :) = [max(max(grph)) max(max(grph)) 1 ];
grph =  spconvert(grph);

[S, prev] = brutte_topk2(grph, 3707); //function approximate pagerank result
eP = graph_ids(S); // returning a list of indexes

我尝试使用你的方法。我创建一个 OBject 表并将结果解析到其中。

    Epidemic object = new Epidemic(); 
    Object[] result;
    result = object.epidemic(1);
    System.out.println((Double)result[0]);

但是我得到 javabuilder.MWNumericArray无法转换为java.lang.Double。当我只打印结果时


您需要将两件事添加到 Java 项目类路径中:

  • 您部署的 JAR 文件created http://www.mathworks.com/help/javabuilder/ug/create-a-java-class-from-matlab-code.html来自 MATLAB 代码。
  • Java生成器 http://www.mathworks.com/products/javabuilder/自己的 JAR 文件。如果你的目标机器上安装了MATLAB,你可以在里面找到那些$MATLABROOT\toolbox\javabuilder\jar\javabuilder.jar,否则安装适当的MCR http://www.mathworks.com/products/compiler/mcr/运行时(免费提供),并在类似的路径中找到 JAR 文件。

See here http://www.mathworks.com/help/javabuilder/ug/integrating-a-java-class-into-an-application.html获取完整说明。


EDIT:

为了完整起见,下面是一个工作示例。

  1. 假设我们有以下返回数字数组的 MATLAB 函数。

    流行病.m

    function list = epidemic()
        list = randi(100, [1, 10]);
    end
    
  2. 使用applicationCompilerMATLAB 应用程序,创建一个新项目来构建“Java 包”。将上述函数添加到项目中,设置类和方法名称,然后构建包。我们应该得到一个 JAR 文件,比如:Epidemic.jar

  3. 接下来我们创建一个Java程序来测试上面的包。例如:

    测试流行病.java

    import java.util.*;
    import com.mathworks.toolbox.javabuilder.*;  // MATLAB Java Builder
    import Epidemic.*;                           // our compiled package
    
    public class TestEpidemic {
        public double[] getArray() throws MWException {
            Epidemic obj = null;
            Object[] out = null;
            double [] arr = null;
            try {
                obj = new Epidemic();
                out = obj.epidemic(1);  // request one output
                arr = (double[]) ((MWArray)out[0]).getData();
            } catch (MWException e) {
                System.out.println("Exception: " + e.toString());
            } finally {
                MWArray.disposeArray(out);
                obj.dispose();
            }
            return arr;
        }
    
        public static void main (String[] args) {
            try {
                TestEpidemic e = new TestEpidemic();
                double[] arr = e.getArray();
                for(double x : arr) {
                    System.out.println(x);
                }
            } catch (Throwable t) {
                t.printStackTrace();
            }
        }
    }
    
  4. 最后我们编译并运行测试程序:

    javac.exe -classpath "%MATLABROOT%\toolbox\javabuilder\jar\javabuilder.jar";.\Epidemic.jar TestEpidemic.java
    
    java.exe -classpath .;"%MATLABROOT%\toolbox\javabuilder\jar\javabuilder.jar";.\Epidemic.jar TestEpidemic
    

    您应该会看到打印出一个由 10 个双精度数字组成的数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Matlab 创建的 jar 文件返回值 的相关文章

  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • createImage(int width, int height) 的问题

    我有以下代码 作为游戏的一部分每 10 毫秒运行一次 private void gameRender if dbImage null createImage returns null if GraphicsEnvironment isHea
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

    我有一个返回 sys refcursor 的 Oracle 函数 当我使用 Hibernate 调用该函数时 出现以下异常 Hibernate call my function org hibernate exception Generic
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • 在 Google App-Engine JAVA 中将文本转换为字符串,反之亦然

    如何从字符串转换为文本 java lang String to com google appengine api datastore Text 反之亦然 Check Javadoc http code google com appengin
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet

随机推荐

  • C# HttpClient,出现错误无法添加值,因为标头“内容类型”不支持多个值

    HttpClient serviceClient new HttpClient serviceClient DefaultRequestHeaders Add accept Application JSON HttpContent cont
  • [Android]如何获取从首选项屏幕启动的意图的结果?

    我需要帮助从发起的意图中获取结果 偏好屏幕 Intent preference DevicePref getPreferenceManager createPreferenceScreen this Show a Screen with l
  • 视频的Graph API帖子无法播放

    我有一个应用程序 可以将 YouTube 上的音乐视频发布到 Facebook 用户的墙上 Facebook 上的帖子将使该嵌入视频可以从 Facebook 播放 最近它不再发生了 经过一些测试 似乎当一个人以 YouTube 视频为源发布
  • 与 Flexbox 底部对齐

    我的容器应该根据内容动态改变高度 对于给定行中的所有容器 底部文本都应固定在底部 无论每个容器中的内容如何 flex list display flex flex direction column flex list flex row di
  • google api 错误 - 无法让 google 登录正常工作

    我有一个应用程序需要访问 Google Fit Api 我可以弹出谷歌登录窗口 但下一个屏幕 请求我的数据类型 TYPE STEP COUNT DELTA AGGREGATE STEP COUNT DELTA 权限的屏幕不会显示 一旦我选择
  • 为什么当我想使用 EF Power 工具查看我的模型时出现错误?

    我首先使用 EF Code 然后通过 vs2010 中的 EF 4 x DbContext Fluent Generator for c 扩展生成我的模型 但是当我想通过 EF Power 工具查看我的实体模型时 我收到此错误 序列不包含匹
  • C++ 不同类型模板化类的显式模板化函数实例化

    我正在尝试在类型 T 的模板化类中显式实例化类型 U 的模板化函数 下面的代码生成警告 并且链接器找不到显式实例化ReinterpretAs 任何人都可以发现错误或建议如何执行此操作吗 我使用的是VC 2010 template
  • Bootstrap:在模式对话框中,如何使下拉菜单扩展到对话框之外?

    示例代码 http jsfiddle net vpg5g http jsfiddle net vpg5g 我想让从按钮下拉的菜单扩展到模式的边框上 如您所见 当前状态无法使用 有什么方法可以实现这一目标吗 模式不允许任何溢出 您可以使用以下
  • document.getElementsByTagName 在 vbscript 中工作吗?

    嗯 它有效 只是没有产生任何有价值的东西 elems document getElementById itemsTable getElementsByTagName TR for j 0 to ubound elems 1 stuff ne
  • 如何直接从内存中显示 webBrowser 控件中的图像?

    如何直接从内存而不是硬盘在 webBrowser 控件中显示图像 当我使用 RAM Disk 软件创建虚拟驱动器时 可以寻址图像源来加载它 如下所示 img src Z image jpg 表示 Z 是 RAM 磁盘驱动器 是否可以在 NE
  • css 中 ?v=2 是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 将 v 1 附加到链接和脚本标记中的 CSS 和 Javascript URL 有何作用 https stackoverflow com questions 3466989 what does app
  • Admob插页式显示黑屏

    最近 我在使用 admob 显示插页式广告时遇到黑屏 这就是我正在谈论的屏幕 有时它运行良好并正确显示广告 这是我使用的代码 Class variable private InterstitialAd oInterstitialAd nul
  • 为什么 sleep 函数睡眠不一致?

    import time from time import sleep from datetime import datetime while True print datetime now strftime Y m d H M S slee
  • C# 属性覆盖Set方法

    我有一个如下所示的班级 当有人设置值时 我想覆盖 学校 国家 等 属性的设置值 我不想更改学生班级 但我需要这样做在基类中并将其用作通用方法 public class Student BaseClass public String Scho
  • 使用 rCharts 添加到图表中所有数据点的唯一链接

    我正在使用 rCharts 创建一个散点图 显示我随时间计算的评分 我有每个单独数据点 评级 的更多信息 并且希望图表上的每个数据点链接到一个独特的页面 其中包含有关该特定数据点的更多信息 例如 我希望能够将鼠标悬停在图表上的第一个数据点上
  • 如何在 Youtube Android Player API 中启用纸板模式?

    我想在我的应用程序中以纸板模式观看 Youtube 的 360 度视频 该模式将视频分成两半 供 Google 纸板中的两个镜头使用 就像在 Youtube 应用程序中一样 我正在使用适用于 Android 的 Youtube 播放器 AP
  • Android Studio渲染问题

    我在用着安卓工作室0 2 3当打开一个活动布置通常 预览应该出现在右侧 以便我可以在之间切换Text and Design模式 这应该再次显示布局的预览 但当我进入时 右侧也没有显示预览text模式也不在design模式 我刚刚收到错误re
  • JMeter在HTTP请求中使用beanshell变量

    我是这里的绝对菜鸟 我的意思是JAVA 花了几个小时寻找解决方案 现在我只想开枪自己 我想在 beanshell 断言中创建一个字符串 该字符串位于 HTTP 请求的正上方 在 beanshell 中我写道 String docid abc
  • 如何在 Mysql 中使用带有 BETWEEN 子句的字母数字字段?

    我有一个包含字段名称为 mgrs 的表 存储在 mgrs 字段中的值类似于 42SWC227821555 可能包含更多字符 并且可能包含小写字母 现在我想搜索两个经理之间的记录 那么我该怎么做呢 我可以先将 mgrs 值转换为整数 然后在
  • 从 Matlab 创建的 jar 文件返回值

    我有一个 Matlab 代码 它最终计算出索引向量 我使用库编译器将 matlab 代码编译为 java 包 jar 文件 我导出了 jar 文件以便在我的主 Java 项目中运行它 包类的名称是 Epidemic 我导入了 jar 文件