在MATLAB中监听Java自定义事件

在MATLAB中监听Java自定义事件,java,events,matlab,Java,Events,Matlab,问题在于 这本书我已经读了很多遍了,但我还是不能把它带到工作中去 其思想是用Java编写一个事件,并为MATLAB编写一个回调 首先,我编写了我的事件类:package.EventTest。 然后我构建了它,并在javaclasspath中添加了带有这些类的路径 然后在matlab中执行: evt = package.EventTest set(evt,'TestEventCallback',@(h,e)disp(h)) evt.notifyMyTest 在“evt.notifyMyTest”

问题在于

这本书我已经读了很多遍了,但我还是不能把它带到工作中去

其思想是用Java编写一个事件,并为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:包“package”()中的我的Java类:

公共类事件测试{
private java.util.Vector data=new java.util.Vector();
公共同步的void addMyTestListener(MyTestListener lis){
数据补充(lis);
}
公共同步void removeMyTestListener(MyTestListener lis){
数据删除(lis);
}
公共接口MyTestListener扩展了java.util.EventListener{
无效testEvent(MyTestEvent事件);
}
公共类MyTestEvent扩展了java.util.EventObject{
私有静态最终长serialVersionUID=1L;
公共浮动旧值、新值;
MyTestEvent(对象对象对象、浮动旧值、浮动新值){
超级(obj);
this.oldValue=oldValue;
this.newValue=newValue;
}
}
public void notifyMyTest(){
java.util.Vector数据拷贝;
已同步(此){
dataCopy=(java.util.Vector)data.clone();
}

对于(inti=0;i我想,我找到了另一种方法来做我想做的事情。 现在我使用
PropertyChangeSupport
PropertyChangeListener

在Matlab中我添加了

“PropertyChangeCallback”

然后从我发送的Java代码

firePropertyChange(“属性”、旧值、新值)

我的Matlab代码被通知了


看起来它正在工作

您想从Java调用MATLAB代码吗?是“package.EventTest”MATLAB类还是Java类?你的问题不是很清楚。嗨,Lex,你认为你可以扩展你的解决方案吗?我遇到了来自未注册MATLAB的相同EventTest类的问题,我希望你的解决方案对我有用。你在MATLAB中添加了什么?你在Java中在哪里添加了代码?
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);
        }
    }
}