问题的答案是“不-您不能”,“ 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,以查找诸如数据源或配置信息之类的资源.
为了执行您实际想要的操作,您将需要实现一些类,该类包装您的整数并使用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();
}
});