在MATLAB中监听Java自定义事件

时间:2012-02-10 10:35:43

标签: java events matlab

问题与question中一样。

我已经多次阅读example ,但我仍然无法将其付诸实践。

我的想法是用Java编写一个Event并为MATLAB编写一个回调函数。

首先我编写了我的事件类:package.EventTest。 然后我构建了它并将这个类的路径添加到javaclasspath。

然后在matlab中执行:

evt = package.EventTest
set(evt,'TestEventCallback',@(h,e)disp(h))
evt.notifyMyTest

在行“evt.notifyMyTest”之后它应该显示一些内容,但什么都没有。 我使用了调试器,因为它涉及到“notifyMyTest”功能,我看到带有监听器的向量是空的。所以它无法显示任何东西。我做错了什么? 这行“set(evt,'TestEventCallback',@(h,e)disp(h))”是否必须向此向量添加侦听器?

或许还有另一种可能性来挑战它?

提前致谢, 莱克斯

UPD:我的Java类包“package”(example):

public class EventTest {

    private java.util.Vector data = new java.util.Vector();
    public synchronized void addMyTestListener(MyTestListener lis) {
        data.addElement(lis);
    }
    public synchronized void removeMyTestListener(MyTestListener lis) {
        data.removeElement(lis);
    }
    public interface MyTestListener extends java.util.EventListener {
        void testEvent(MyTestEvent event);
    }
    public class MyTestEvent extends java.util.EventObject {
        private static final long serialVersionUID = 1L;
        public float oldValue,newValue;        
        MyTestEvent(Object obj, float oldValue, float newValue) {
            super(obj);
            this.oldValue = oldValue;
            this.newValue = newValue;
        }
    }
    public void notifyMyTest() {
        java.util.Vector dataCopy;
        synchronized(this) {
            dataCopy = (java.util.Vector)data.clone();
        }
        for (int i=0; i<dataCopy.size(); i++) {
            MyTestEvent event = new MyTestEvent(this, 0, 1);
        ((MyTestListener)dataCopy.elementAt(i)).testEvent(event);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我想,我找到了另一种方法来做我想做的事。 现在我使用PropertyChangeSupportPropertzChangeListener

在Matlab中我添加

  

&#39; PropertyChangeCallback&#39;

然后从Java代码发送

  

firePropertyChange(&#34; Property&#34;,oldValue,newValue)

我的Matlab代码已通知。

看起来像是在工作