康斯坦丁的回答基本正确,但不完整。这是一个更完整的答案。
1) 您注册一个 IJavaElementChangeListene 并监听“POST_CHANGE_EVENTS”。(见康斯坦丁的例子)。
2) 当您收到更改事件时,您将增量向下移动到 IJavaProject 级别并查找设置了标志 IJavaElementDelta.F_CLASSPATH_CHANGED 或 IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED 的事件。如在此代码段中:
class MyListener implements IElementChangedListener {
@Override
public void elementChanged(ElementChangedEvent event) {
visit(event.getDelta());
}
private void visit(IJavaElementDelta delta) {
IJavaElement el = delta.getElement();
switch (el.getElementType()) {
case IJavaElement.JAVA_MODEL:
visitChildren(delta);
break;
case IJavaElement.JAVA_PROJECT:
if (isClasspathChanged(delta.getFlags())) {
notifyClasspathChanged((IJavaProject)el);
}
break;
default:
break;
}
}
private boolean isClasspathChanged(int flags) {
return 0!= (flags & (
IJavaElementDelta.F_CLASSPATH_CHANGED |
IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED
));
}
public void visitChildren(IJavaElementDelta delta) {
for (IJavaElementDelta c : delta.getAffectedChildren()) {
visit(c);
}
}
}
摘录此摘录的完整代码在这里