主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

表示本机 Java 单元和结构体数组

Java® 没有可用于 MATLAB® 结构体数组和元胞数组的直接表示。因此,当使用 MWStructArray 方法将 MWCellArraytoArray() 的实例转换为 Java 本机类型时,输出是一个多维 Object 数组,这可能很难处理。

当您将 MATLAB Compiler SDK™ 包与 RMI 结合使用时,您可以控制服务器如何将 MATLAB 函数调用的结果发送回客户端。可以将服务器设置为将输出作为 MWArraycom.mathworks.toolbox.javabuilder 包)子类型或 Java 本机数据类型编组到客户端。MWArray 子类型的 Java 本机数据类型表示是通过服务器调用 toArray() 方法获得的。

如果以下两个条件都成立,则可以使用 Java 结构和元胞数组的 MATLAB 本机表示:

  • 您在服务器上拥有 MATLAB 函数,并以 MATLAB 结构或单元数据类型作为输入或输出

  • 您不想在客户端计算机上安装 MATLAB Runtime

com.mathworks.extern.java 包(在 javabuilder.jar 中)中的类不需要 MATLAB Runtime。此包中类的名称与 com.mathworks.toolbox.javabuilder 中的类名称相同 - 允许您在没有 MATLAB Runtime 的计算机上轻松创建 com.mathworks.extern.java.MWStructArraycom.mathworks.extern.java.MWCellArray 的实例,其工作方式与 com.mathworks.toolbox.javabuilder 中同名类相同。

由于 MWArray 类层次结构只能与 MATLAB Runtime 一起使用,如果客户端计算机没有可用的 MATLAB Runtime,则服务器将分别将结构或元胞数组的 toArray() 输出作为 com.mathworks.extern.java.MWStructArraycom.mathworks.extern.java.MWCellArray 的实例返回。

前提条件

要运行此示例,您的环境必须满足以下前提条件:

  • 在开发计算机上安装 MATLAB Compiler SDK

  • 在开发计算机上安装受支持的 Java 开发工具包 (JDK™) 版本。有关详细信息,请参阅配置用于生成 Java 包的环境

  • 在 Web 服务器上安装 MATLAB Runtime。有关详细信息,请参阅下载并安装 MATLAB Runtime

  • 确保您的 Web 服务器能够运行公认的 Java 框架(例如 J2EE)。

  • javabuilder.jar 库 (matlabroot/toolbox/javabuilder/jar/javabuilder.jar) 安装到 Web 服务器的通用库文件夹中。

    如果您的实现有单独的客户端计算机,那么它们也需要 javabuilder.jar,因为它包含 com.mathworks.extern.java 包。

注意

您不需要在客户端安装 MATLAB Runtime。可以使用 boolean marshalOutputs 类中的 RemoteProxy 自动转换 MATLAB Runtime 的返回值。有关详细信息,请参阅 matlabroot/help/toolbox/javabuilder/MWArrayAPI 中的 Java API 文档。

过程

NativeCellStruct 文件夹从 MATLAB 复制到您的工作文件夹:

copyfile(fullfile(matlabroot,'toolbox','javabuilder','Examples','RMIExamples','NativeCellStruct'))

在 MATLAB 命令提示符下,导航到工作文件夹中的新 NativeCellStruct\NativeCellStructDemoComp 子文件夹。

检查 MATLAB 函数 createEmptyStruct.mupdateField.m

 createEmptyStruct.m

 updateField.m

通过在 Java 命令提示符下发出以下命令,使用 compiler.build.javaPackage 生成 MATLAB 包:

compiler.build.javaPackage({'createEmptyStruct.m','updateField.m'}, ...
    'PackageName','nativeCellStructComp', ...
    'ClassName','nativeCellStructClass', ...
    'Verbose','on');

有关详细信息,请参阅生成 Java 包并编译 Java 应用程序中的说明。

在系统命令提示符下,导航到 NativeCellStruct\NativeCellStructDemoJavaApp 文件夹。

通过在系统命令提示符下发出以下 javac 命令之一来编译服务器 Java 代码。

  • 在 Windows® 上,键入:

    javac -classpath
     "matlabroot\toolbox\javabuilder\jar\javabuilder.jar;path\to\nativeCellStructComp.jar"
     NativeCellStructServer.java
  • 在 UNIX® 上,键入:

    javac -classpath
     "matlabroot/toolbox/javabuilder/jar/javabuilder.jar:path/to/nativeCellStructComp.jar"
     NativeCellStructServer.java

注意

matlabroot 替换为 MATLAB 或 MATLAB Runtime 安装文件夹的路径。

通过在系统命令提示符下发出以下 javac 命令之一来编译客户端 Java 代码。

  • 在 Windows 上,键入:

    javac -classpath
     "matlabroot\toolbox\javabuilder\jar\javabuilder.jar;path\to\dataTypesComp.jar
     NativeCellStructClient.java
  • 在 UNIX 上,键入:

    javac -classpath
     "matlabroot/toolbox/javabuilder/jar/javabuilder.jar:path/to/dataTypesComp.jar"
     NativeCellStructClient.java

通过打开两个命令行窗口(一个用于客户端,一个用于服务器)来准备运行服务器和客户端应用程序。

通过在系统命令提示符下以一行形式发出以下 java 命令之一来运行服务器。

  • 在 Windows 上,键入:

    java -classpath
     .;"path\to\dataTypesComp.jar;matlabroot\toolbox\javabuilder\jar\javabuilder.jar"
     -Djava.rmi.server.codebase="file:///matlabroot\toolbox\javabuilder\jar\javabuilder.jar
     file:///path\to\dataTypesComp.jar"
     NativeCellStructServer
  • 在 UNIX 上,键入:

    java -classpath
     .:"path/to/dataTypesComp.jar;matlabroot/toolbox/javabuilder/jar/javabuilder.jar"
     -Djava.rmi.server.codebase="file:///matlabroot/toolbox/javabuilder/jar/javabuilder.jar
     file:///path/to/dataTypesComp.jar"
     NativeCellStructServer

在第二个命令行窗口中,通过在一行中发出以下 java 命令之一来运行客户端。

  • 在 Windows 上,键入:

    java -classpath
     .;"path/to/\dataTypesComp.jar;matlabroot\toolbox\javabuilder\jar\javabuilder.jar"
     NativeCellStructClient
  • 在 UNIX 上,键入:

    java -classpath
     .:"path/to/dataTypesComp.jar;matlabroot/toolbox/javabuilder/jar/javabuilder.jar"
     -Djava.rmi.server.codebase="file:///matlabroot/toolbox/javabuilder/jar/javabuilder.jar
     file:///path/to/dataTypesComp.jar"
     NativeCellStructClient

如果命令执行成功,则运行服务器的命令行窗口中会出现以下输出:

 Please wait for the server registration notification.
            Server registered and running successfully!!

            EVENT 1: Initializing the structure on server and 
                     sending it to client:
                     Initialized empty structure:

                     Name: ' '
                     Address: []


            ##################################

            EVENT 3: Partially initialized structure as received 
                                                     by server:

                     Name: ' '
                     Address: [1x1 struct]

               Address field as initialized from the client:

                     Street: '3, Apple Hill Drive'
                     City: 'Natick'
                     State: 'MA'
                     Zip: '01760'

            ##################################

            EVENT 4: Updating 'Name' field before sending the 
                     structure back to the client

                     Name: 'The MathWorks'
                     Address: [1x1 struct]


            ##################################



   

运行客户端的命令行窗口中会出现以下输出:

Running the client application!!

            EVENT 2: Initialized structure as received in client 
                                                    applications:

                     1x1 struct array with fields:
                        Name
                        Address

                Updating the 'Address' field to :

                     1x1 struct array with fields:
                        Street
                        City
                        State
                        Zip

            #################################

            EVENT 5: Final structure as received by client:

                     1x1 struct array with fields:
                        Name
                        Address

                Address field:

                     1x1 struct array with fields:
                        Street
                        City
                        State
                        Zip

            #################################

另请参阅

主题