Проблема как в вопросе .
Я уже много раз читал пример , но все равно не могу заставить его работать.
Идея состоит в том, чтобы написать событие на 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))" добавить слушателя к этому вектору?
Или, может быть, есть еще одна возможность оспорить это?
Заранее спасибо,
Lex
UPD: Мой класс 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);
}
}
}