我一直在使用Swig为用 C++ 编写的库创建 Java 包装器。包装器生成到一个包中,然后 jar '编辑。这些文件已正确编译并与 java 完美配合,但我无法从 MATLAB 调用它。
我尝试在 MATLAB 的静态 Java 路径文件中添加 jar 的路径,然后调用 jar 文件中的类,但我收到错误 "Undefined variable or class.."或者如果我尝试使用 javaObject(...) "No class * can be located on Java class path" .
我不确定我做错了什么。
编辑:
为了测试从 MATLAB 调用 C++ 库,我创建了一个简单的“数据读取器”类,其中包含一个函数,该函数写入随机生成的 vector< vector<double> >到一个文本文件和一个读取它的函数。
生成的 swig 文件是:SimpleReader.java , DoubleVector.java , exampleJNI.java , example.java , DoubleVector2.java在包裹中 com.example.reader .这些被编译并打包成 example.jar (生成的库dll也打包进了jar)。
从 java 调用它一切正常,所以问题一定是特定于 MATLAB 的。 MATLAB 的代码不多,因为似乎没有任何效果。我得到尽可能
javaclasspath('c:/reader/reader.jar');
obj = com.example.reader.SimpleReader;
此时我得到 'Undefined variable "com" or class "com.example.reader.SimpleReader"'
最佳答案
一般来说,你应该能够做到这一点:
javaclasspath('/path/to/myjar.jar')
myobj = com.example.mypackage.MyObject;
myobj.someMethod(123);
我已经在 MATLAB 中使用它很长一段时间了,没有遇到任何问题。也许您可以发布您正在使用的确切 MATLAB 代码?
I get as far as
javaclasspath('c:/reader/reader.jar'); obj = com.example.reader.SimpleReader;at which point I get 'Undefined variable "com" or class "com.example.reader.SimpleReader"'
好吧,首先,您提到您的 jarfile 名为 example.jar ,但您的 MATLAB 代码引用了 reader.jar -- 你确定你在 javaclasspath() 中引用的 jar 吗?存在?你试过看它的内容吗? (例如,使用 7zip 或任何可以读取 .zip 格式文件的程序,因为 .jar 文件只是具有附加规范的 .zip 格式文件)
嗯...
您使用的是哪个版本的 MATLAB?
你们的类(class)是公开的吗?
当您尝试输入以下内容时,您会得到什么:
javap -classpath c:/reader/example.jar com.example.reader.SimpleReader
您说您使用的是 7.0.4 版——这可能是问题所在。 Earlier versions of MATLAB use an older version of the Java JRE :
MATLAB is only fully supported on the JVM that we ship with MATLAB. For example:
JVM 1.3.1 for MATLAB 6.5.1 (R13SP1)
JVM 1.4.2 for MATLAB 7.0.1 (R14SP1)
MATLAB 7.0.4 (R14SP2) and later versions till MATLAB 7.4 (R2007a) use JVM 1.5 and MATLAB 7.5 (R2007b) and later use JVM 1.6. There are components that may not work properly under a different version of the JVM.
此时您基本上有三个选择。
(如果可能)——仅使用与 Java 5 兼容的 JAR 文件。在这种情况下,由于您要创建自己的库,因此需要使用 the -target 1.5 option . (target="1.5" 如果您使用的是 ant <javac> 任务)这通常不是什么大问题,因为 1.6 是 1.5 的增量改进——尽管如果您使用的是少数 Java 6 类中的一些类喜欢 ArrayDeque ,或依赖于 1.6 的外部库,你真倒霉。
使用 JRE 1.6 和 Matlab 7.4 by changing the JVM .不确定这是个好主意。
将 MATLAB 升级到可在 Java 6(R2007b 或更高版本)上运行的版本。
当您将 Java 开发环境升级到 Java 7 或 Java 8 时,请记住这个问题。
关于java - 从 MATLAB 调用 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6983324/
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/