Прослушивание пользовательского события Java в MATLAB - PullRequest
2 голосов
/ 10 февраля 2012

Проблема как в вопросе .

Я уже много раз читал пример , но все равно не могу заставить его работать.

Идея состоит в том, чтобы написать событие на 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);
        }
    }
}

1 Ответ

1 голос
/ 13 февраля 2012

Я думаю, я нашел другой способ сделать то, что я хочу. Теперь я использую PropertyChangeSupport и PropertzChangeListener.

В Matlab я добавляю

PropertyChangeCallback '

Затем с Java-кода отправляю

firePropertyChange («Свойство», oldValue, newValue)

И мой код Matlab уведомляется.

Похоже, это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...