在matlab classdef中导入java类

Posted

技术标签:

【中文标题】在matlab classdef中导入java类【英文标题】:importing java classes in matlab classdef 【发布时间】:2013-05-06 21:10:58 【问题描述】:

我有一个使用 classdef 定义的 matlab 类。

我正在为一些 java 东西创建一个包装器,并且需要导入几个类。

我不知道在哪里导入这些类,目前我可以根据需要在每个方法中导入它们......这很痛苦。

有什么想法吗?

【问题讨论】:

【参考方案1】:

是的,你需要将它们导入到每个方法中,这很痛苦。

【讨论】:

【参考方案2】:

一个小测试确认你需要在每个方法中重复导入列表:

classdef MyClass < handle
    properties
        s
    end
    methods
        function obj = MyClass()
            import java.lang.String
            obj.s = String('str');
        end
        function c = func(obj)
            c = String('b');      %# error: undefined function 'String'
        end
    end
end

【讨论】:

【参考方案3】:

两个答案都不正确(不再正确?)。您可以将导入的类分配给类对象的属性并在不重新导入的情况下访问它们。以下代码运行良好(在 Matlab 2016a 中测试):

classdef moveAndClick < handle
    properties (Access = private)
        mouse;
        leftClick;
    end

    methods
        %% Constructor
        function obj = moveAndClick()
            import java.awt.Robot;
            import java.awt.event.InputEvent;
            obj.mouse = Robot;
            obj.leftClick = InputEvent.BUTTON1_MASK;
        end

        %% Destructor
        function delete (~)
        end

        function moveClick (obj, positionX, positionY)
            % move mouse to requested position
            obj.mouse.mouseMove(positionX, positionY);

            % click on the current position
            obj.mouse.mousePress(obj.leftClick);
            obj.mouse.mouseRelease(obj.leftClick);
        end
    end
end

【讨论】:

你错了。您分配给该属性的是一个对象 instance (通过空参数构造函数创建)。然后,您只是引用此对象实例,它与类导入无关。如果要在moveClick 中创建另一个Robot() 实例,则必须再次导入该类。 你是对的,我误解了这个问题。感谢您的澄清。

以上是关于在matlab classdef中导入java类的主要内容,如果未能解决你的问题,请参考以下文章

在matlab中导入txt文件,怎样将以下数据分开

在matlab中导入没有恒定行长的固定宽度数据

在 MATLAB 中导入带有注释的文本文件

如何在Jsp页面中导入JAVA类

在 Java 中导入自定义类

在python中导入matlab(.mat)数据