问题与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);
}
}
}
答案 0 :(得分:1)
我想,我找到了另一种方法来做我想做的事。
现在我使用PropertyChangeSupport
和PropertzChangeListener
。
在Matlab中我添加
&#39; PropertyChangeCallback&#39;
然后从Java代码发送
firePropertyChange(&#34; Property&#34;,oldValue,newValue)
我的Matlab代码已通知。
看起来像是在工作