主要内容

单个多个包的限制java.应用

在开发Java时®使用多个MATLAB的应用程序®packages, consider that the following types of data cannot be shared between packages:

  • MATLAB功能处理

  • 马铃薯草figure handles

  • matlab对象

  • C, Java, and .NET objects

  • 存储在单元格阵列和结构中的可执行数据

要解决这些限制,可以将多个Java包组合成一个包。

结合包装马铃薯草功能手柄

MATLAB功能句柄可以在应用程序和应用程序之间传递matlab运行时它起源的实例。但是,MATLAB函数句柄不能传递给matlab运行时除了它起源的实例。例如,假设您有两个MATLAB功能,get_plot_handle.andplot_xy., 然后plot_xy.使用创建的函数句柄get_plot_handle.

%保存为get_plot_handle.m功能h = get_plot_handle(lnSpec, lnWidth, mkEdge, mkFace, mkSize) h = @draw_plot;功能draw_plot(x,y)plot(x,y,lnspec,......'行宽',lnwidth,......'markeredgecolor',mkedge,......'markerfacecolor',mkface,......'MarkerSize',贬低)结尾结尾
%保存为plot_xy.m功能plot_xy.(x, y, h) h(x, y);结尾

如果您将它们编译为两个包,则呼叫plot_xy.会抛出一个例外。

导入com.mathworks.toolbox.javabuilder。*;导入get_plot_handle。*;导入plot_xy。*;类绘图{public静态void main(String [] args){mwarray h = null;尝试{plotter_handle = new get_plot_handle.class1();plot = new plot_xy.class1();h = plotter_handle.get_plot_handle(1,' -  rs',2.0,'k','g',10);double [] x = {1,2,3,4,5,6,7,8,9};双[] Y = {2,6,12,20,30,42,56,72,90};plot.plot_xy(x,y,h); } catch (Exception e) { System.out.println("Exception: " + e.toString()); } finally { MWArray.disposeArray(h); plot.dispose(); plotter_handle.dispose(); } } }

纠正情况的方法是将两个函数编译成一个包。

导入com.mathworks.toolbox.javabuilder。*;import plot_functions.*; class plotter { public static void main(String[] args) { MWArray h = null; try { plot_funcs = new Class1(); h = plot_funcs.get_plot_handle(1, '--rs', 2.0, 'k', 'g', 10); double[] x = {1,2,3,4,5,6,7,8,9}; double[] y = {2,6,12,20,30,42,56,72,90}; plot_funcs.plot_xy(x, y, h); } catch (Exception e) { System.out.println("Exception: " + e.toString()); } finally { MWArray.disposeArray(h); plot_funcs.dispose(); } } }

您还可以使用单身统一纠正这种情况matlab运行时。有关更多信息,请参阅共享MATLAB运行时实例

结合包装Objects

MATLAB编译器SDK™使您可以返回以下类型的对象matlab运行时to your application code:

  • 马铃薯草

  • C ++

  • 。网

  • java.

但是,您无法通过一个创建的对象matlab运行时实例进入不同的matlab运行时instance. This conflict can happen when a function that returns an object and a function that manipulates that object are compiled into different packages.

例如,您开发了两个功能。第一个基于某些条件为客户创建银行账户。二次转移两个账户之间的资金。

百分比作为概要保存Classdef.帐户<句柄properties姓名结尾properties(setaccess =受保护)余额= 0数结尾方法功能obj =帐户(name)obj.name = name;obj.number =圆形(兰德* 1000);结尾功能存款(obj,存款)new_bal = obj.balance +存款;obj.balance = new_bal;结尾功能撤回(obj,撤回)new_bal = obj.balance  - 撤销;obj.balance = new_bal;结尾结尾结尾
%保存为open_acct .m功能acct = open_acct(名称,open_bal)acct =帐户(名称);如果Open_bal> 0 acct.deposit(open_bal);结尾结尾
%保存为Transfer.m功能转移(来源,Dest,金额)如果(source.balance > amount) dest.deposit(amount); source.withdraw(amount);结尾结尾

如果你编译了open_acct.m.and转移进入单独的包裹,您无法使用使用的帐户转移资金open_acct.。The call to转移抛出一个例外。解决此冲突的一种方法是将两个函数编译成一个包。您还可以重新推荐应用程序,以便您不会将MATLAB对象传递给函数。你也可以使用单身matlab运行时。See共享MATLAB运行时实例

Related Topics