问题如question .
我读了example 已经很多次了,但我仍然无法正常工作。
想法是用 Java 写一个 Event 并为 MATLAB 写一个回调。
首先我写了我的事件类:package.EventTest。 然后我构建它并将带有此类的路径添加到 javaclasspath。
然后在 matlab 中执行:
evt = package.EventTest
set(evt,'TestEventCallback',@(h,e)disp(h))
evt.notifyMyTest
在“evt.notifyMyTest”行之后它应该显示一些东西,但什么也没有。 我使用了一个调试器,当涉及到函数“notifyMyTest”时,我看到带有监听器的 vector 是空的。所以它不能显示任何东西。我做错了什么? 这行“set(evt,'TestEventCallback',@(h,e)disp(h))”是否必须向该 vector 添加监听器?
或者有另一种可能来挑战它?
提前致谢, 莱克斯
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);
}
}
}
最佳答案
我想,我找到了另一种方法来做我想做的事。
现在我使用 PropertyChangeSupport
和 PropertzChangeListener
。
在 Matlab 中我添加
'PropertyChangeCallback'
然后我从 Java 代码发送
firePropertyChange("Property", oldValue, newValue)
我的 Matlab 代码会收到通知。
看起来很正常
关于java - 在 MATLAB 中监听 Java 自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226385/