在Matlab中理解Java回调/事件

时间:2014-12-02 22:07:27

标签: java matlab events proxy listener

我试图更全面地了解在Matlab中将侦听器添加到java对象时发生的事情。有关原始讨论,请参阅here

下面是一个用于设置回调的java src

public class Handler {

    public Listener object;

    public class Event extends java.util.EventObject {
        public double d1,d2,d3;
        Event(Object obj, double d1, double d2, double d3) {
            super(obj); this.d1 = d1; this.d2 = d2; this.d3 = d3;
        }}

    public interface Listener extends java.util.EventListener {
        // the function call matlab proxy obj implements
        void measurement(Event event);
    }

    public void addListener   (Listener listener) {
        System.out.println("listener has been added");
        this.object = listener;
    }

    public void removeListener(Listener listener) {
        System.out.println("listener has been removed");
        this.object = null;
    }

    // wrapper function (i.e. what actually exposed/called/used)
    public void measurement(double temp, double pressure, double height) {
        this.object.measurement( new Event(this, temp, pressure, height) );
        System.out.println("listener has been notified");
    }
}

然后在Matlab(2014b)中可以设置Java - > Matlab回调为

% create Handler java object in matlab
handler = com.callback.Handler();

% add a listener for interface function measurement(e)
addlistener(handler,'measurement',@(h,e)disp(e.d1+e.d2+e.d3));

% call the wrapper function manually to test setup
handler.measurement(1,2,3);

Matlab的addlistener调用初始设置的一些想法由

执行
 /toolbox/matlab/uitools/private/javaaddlistener.m

在Matlab中调用addlistener时,我在命令窗口中收到消息

  已添加

侦听器

来自addListener中的Handler函数。所以这里Matlab动态创建了一个实现Listener接口并调用

的对象
handler.addListener(mysteryObj);

我可以试着看看Matlab在那里放了什么

>> handler.object

返回

  

com.mathworks.MLEventAdapters.com.callback.Handler$ListenerLIAdapterClass@45a37759

我猜是某种动态创建的proxy对象?

这里最令人烦恼的问题是,一旦我突然看到>> handler.object,我就会看到消息

  

侦听器已被删除

但为什么?这意味着Matlab会自动调用

handler.removeListener(mysteryObj) 

这里吗?

无论如何,我开始浏览com.mathworks.jmi,但这需要一段时间,我甚至不确定答案是否存在......任何帮助都会很棒。

0 个答案:

没有答案