화재가 발생하는 리스너를 추가하고 싶습니다. Eclipse 환경 설정이 변경되었습니다.환경 설정 변경에 응답하는 IPreferenceChangeListener를 어떻게 추가합니까?
페이지를 선언하는 UI 플러그인의 활성기를 사용하여 특정 환경 설정 페이지에서이를 수행하는 방법을 알고 있습니다. 당신은 Activator.start() 메소드 호출 다음과 같은 API 사용할 수 있습니다 :
getPreferenceStore().addPropertyChangeListener(IPropertyChangeListener listener)
을하지만 어떤 환경 설정이 변경 될 때마다 청취자가 통지 싶습니다. 내 Activator.start() 메소드 호출 다음, 시도 :는 getNode은 환경 설정의 루트를 나타낼 수 있지만,이 작동하지 않는 것의
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
public class Activator extends AbstractUIPlugin {
...
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
addMyPreferenceChangeListener();
}
private IPreferenceChangeListener fPreferenceChangeListener;
private void addMyPreferenceChangeListener() {
fPreferenceChangeListener = new IPreferenceChangeListener() {
public void preferenceChange(PreferenceChangeEvent event) {
System.err.println("PreferenceChangeEvent");
}
};
IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode("/");
prefs.addPreferenceChangeListener(fPreferenceChangeListener);
}
}
내가 "/"희망을; 환경 설정 (예 : 윈도우> 환경 설정> 일반> 항상 백그라운드에서 실행)을 변경하면 println()이 실행되지 않습니다.
안녕 그렉-449, 우수 감사합니다. 첫 번째 비트 (방문자)를 얻을 수는 있지만 addNodeChangeListener를 완료하는 방법을 모르겠습니다. 제거 (NodeChangeEvent 이벤트) 또는 추가 (NodeChangeEvent 이벤트) 메소드에서 event.getChild()를 할 수 있지만 org.osgi.service.prefs.Preferences를 제공합니다. 그걸로 내가 뭘 할 수 있니? 다른 accept (visitor)를 실행하고 새로운 listener를 새로운 노드에 추가 할 수 있도록 IEclipsePreferences 노드를 기대하고있었습니다. – betamax
IEclipsePreferences는 환경 설정을 확장합니다. 저는 여러분이 가치있게 캐스트 할 수 있어야한다고 생각합니다. –
네, 맞습니다.내부 (NodeChangeEvent 이벤트) 추가 할 수 있었다 : \t \t \t \t \t \t \t IEclipsePreferences 노드 = (IEclipsePreferences) event.getChild(); \t \t \t \t \t \t \t node.addPreferenceChangeListener (fPreferenceChangeListener); 그러나 노드가 제거 되었기 때문에 예외가 발생하기 때문에 removed()에서 리스너를 제거 할 수 없습니다. 나는 다른 코드가 이것을 언급하는 것을 보았다. – betamax