MATLAB社区

MATLAB,社区和更多

从MATLAB调用Java

到目前为止还没有人接受我的额外学分交互式网页职位。我认为在没有图像文件的情况下显示图形的问题太有趣了,所以我自己想出了解决方案,并把它放在了文件交换.关于ActiveX的第二个挑战将一直保持开放,直到我有机会写出它的解决方案。或者,如果你没有时间,你仍然可以赢得一件t恤把你的桌面发给我们

我对图像挑战的解决方案涉及编码二进制信息从图像文件作为文本通过base64方案.起初,我想在MATLAB中实现base64算法,但我在几年前编写了自己的md5哈希计算程序(不要问),这是一种艰难的方式。这次我想使用一个现成的解决方案。由于没有工具箱函数,我决定利用Java库,因为(a)我可以在每个平台上使用相同的库(而不需要不同的预编译二进制文件),(b)我对Java非常熟悉。我的解决方案利用了免费可用的资源Apache Commons编解码器包中。

在MATLAB程序中使用Java就像使用MATLAB函数一样简单,特别是如果您习惯于使用MATLAB包函数的话。的任何公共方法Java SE API从命令行。JRE的运行版本取决于MATLAB和操作系统的版本,并决定MATLAB有哪些API功能可用。要确定Java版本,请使用该命令版本(“java”.要更改Java版本(不推荐),可以遵循以下步骤这些指令

比如代替MATLAB的str2num你可以用:Double'sparseDouble

str2num (“2.3”) java.lang.Double.parseDouble (“2.3”
Ans = 2.3000

当然,这只是一个简单的例子。我们的许多功能,例如xmlread使用更复杂的Java对象调用系列。收益sendmail函数在最后使用Transport对象发送预先构造的MimeMessage。

javax.mail.Transport.send(味精)

我的base64程序不使用标准JRE中的类(事实上,sendmail也不使用),而是使用了一个第三方库(Apache Commons Codec),我知道这个库附带于MATLAB,并且在类路径中已经可用了。

编码器= org.apache.commons.codec.binary.Base64;base64string = char (encoder.encode(字节));

这些例子有关于使用Java的三个方面,我想说明,以便您可以在MATLAB中使用其他Java库:(1)类路径,(2)调用语法,(3)数据类型。

Java类路径
MATLAB为Java类维护一个与搜索路径分离的路径。这意味着即使你在MATLAB路径上有。class或。jar文件,除非你使用javaaddpath你将无法使用它。查看当前路径上使用的是什么javaclasspath.运行此命令,您将显示matlab附带的一长串文件,称为静态类路径,然后您将看到动态类路径。动态类路径是类添加到路径的地方javaaddpath将被放置。它们可以被移除javarmpath并且必须主动重新加载matlab的每个会话。静态类路径来自$matlabroot\toolbox\local\classpath.txt,只在MATLAB启动时添加到类路径中。默认情况下,这里列出的是我们编写的所有Java类(com.mathworks包)。不支持直接调用这些类,而且可能会在发布到发布的基础上中断,但web上有一些资源可以有效地利金宝app用这些类。

调用Java函数
将类添加到类路径并显示在javaclasspath,您可以从命令行或matlab文件中使用它。要做到这一点,你可以使用全限定名(例如:javax.swing.JTable)或类似于MATLAB包,您可以使用import语句只调用类名(例如。进口(javax.swing . *), JTable).

数据类型
看看我的string to double例子,你会看到我传递了一个MATLAB char数组给java函数,并得到了一个MATLAB doublemethodsview (“java.lang.Double”显示,parseDouble需要一个作为它的输入。MATLAB将在调用Java方法时自动转换原始类型,以及转换字符数组对象作为输入时使用。正如您在我的base64示例中所看到的,我必须显式地转换返回的encoder.encode ()到一个MATLAB字符数组。

这些是调用Java的基础。在以后的文章中,我希望讨论与Java有关的内存管理(最近一些技术支持查询的主题)以及与gui相关的线程问题。金宝app

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。