我有一个Eclipse插件,插件的首选项页面中有一个复选框。 此复选框用于启用和禁用从此插件启动的编辑器。
然而,问题是,我还希望能够通过更改上述首选项页面中复选框值的操作,从另一个插件启用和禁用此“编辑器启动”。 / p>
问题是,如何从其他插件访问本地首选项存储?
我尝试过像......
View myView = (View) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("ViewID");
但是这个'myView
'似乎总是为空。而且,我会对视图做什么,因为它是我想要的插件。
Platform.getBundle('bundleName')...
在这里,想要插件,而不是对应的包是。
无论我尝试什么似乎都没有用。
有没有人有任何想法?
答案 0 :(得分:1)
答案 1 :(得分:1)
有两种方法可以做到这一点:
请参阅http://www.vogella.com/tutorials/EclipsePreferences/article.html#preferences_pluginaccess
使用.getPluginPreferences()。例如,有一个插件类“com.xxx.TestPlugin”,它扩展了org.eclipse.ui.plugin.AbstractUIPlugin.Plugin,以便访问TestPlugin的首选项。插件代码可以在下面:
public class TestPlugin extends AbstractUIPlugin {
private static TestPlugin plugin;
public static final String PREF_TEST = "test_preference";
/**
* The constructor.
*/
public TestPlugin() {
plugin = this;
}
/**
* This method is called upon plug-in activation
*/
public void start(BundleContext context) throws Exception {
super.start(context);
}
/**
* This method is called when the plug-in is stopped
*/
public void stop(BundleContext context) throws Exception {
super.stop(context);
plugin = null;
}
/**
* Returns the shared instance.
*/
public static TestPlugin getDefault() {
return plugin;
}
}
要访问TestPlugin的首选项,代码可以是:
TestPlugin.getDefault().getPluginPreferences().getDefaultBoolean(TestPlugin.PREF_TEST);
答案 2 :(得分:0)
这thread recommend使用服务跟踪器:
ServiceTracker tracker = new ServiceTracker(ToolkitPlugin.getDefault().getBundle().getBundleContext(),
IProxyService.class.getName(), null);
tracker.open();
proxyService = (IProxyService) tracker.getService();
proxyService.addProxyChangeListener(this);
答案 3 :(得分:0)
这可能有效。
每个插件都可以找到Prefs商店。这是获取激活器类为ActivatorA的插件的prefs存储的一种方法。
IPreferenceStore store = ActivatorA.getDefault()。getPreferenceStore();
如果你想让另一个插件引用同一个商店,也许你可以在ActivatorA上公开一些api来实现它,例如。
public IPreferenceStore getSharedPrefs(){ return ActivatorA.getDefault()。getPreferenceStore(); }
第二个插件会通过执行此操作找到共享存储
IPreferenceStore sharedPrefs = ActivatorA.getSharedPrefs();
祝你好运。