Ответ на вопрос: "нет - вы не можете" и "JNDI и javax.naming
не имеет ничего общего с вашей проблемой"
Я думаю, что вы, возможно, путаете инфраструктуру слушателя Swing / JavaBeans с JNDI , интерфейсом именования Java и каталога. ObjectChangeListener
полезен только для прослушивания объектов, которые связаны и повторно связаны в контексте JNDI. Вы не можете использовать ObjectChangeListener для прослушивания изменений в произвольном объекте
InitialContext ctx = new InitialContext();
ctx.rebind("path/to/x", new Integer(4));
Для этого вам нужна реализация JNDI. Чтобы прослушать изменения, вы прослушиваете EventContext
:
InitialContext ctx = new InitialContext();
EventContext ec = (EventContext) ctx.lookup("");
ec.addNamingListener("path/to/x", myListener)
Если вы попробуете это , произойдет сбой, поскольку вы не определили провайдера JNDI . Обычно они предоставляются поставщиком сервера приложений, например, IBM WebSphere или JBoss. Сервер приложений предоставляет JNDI для приложений для поиска ресурсов, таких как источники данных или информация о конфигурации.
Чтобы сделать то, что вы действительно хотите , вам нужно реализовать некоторый класс, который обернет ваше целое число и использует механизм property-change в Java:
public class MyInteger {
private int x;
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public void setX(int i) {
int old = x;
x = i;
pcs.firePropertyChange("x", old, x);
}
public void addListener(PropertyChangeListener l) {
pcs.addListener("x", l);
}
}
Тогда, это может быть использовано вашим кодом:
MyInteger i = new MyInteger(9);
i.addListener(new PropertyChangeListener() {
public void propertyChanged(PropertyChangedEvent e) {
//implement to process the change - e.g. update your table
Integer i = (Integer) e.getNewValue();
}
});