Eclipse:在插件中,如何访问另一个插件首选项存储?

时间:2009-11-25 12:11:36

标签: eclipse-plugin

我有一个Eclipse插件,插件的首选项页面中有一个复选框。 此复选框用于启用和禁用从此插件启动的编辑器。

然而,问题是,我还希望能够通过更改上述首选项页面中复选框值的操作,从另一个插件启用和禁用此“编辑器启动”。 / p>

问题是,如何从其他插件访问本地首选项存储?

我尝试过像......

View myView = (View) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("ViewID");

但是这个'myView'似乎总是为空。而且,我会对视图做什么,因为它是我想要的插件。

Platform.getBundle('bundleName')...  

在这里,想要插件,而不是对应的包是。

无论我尝试什么似乎都没有用。
有没有人有任何想法?

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

有两种方法可以做到这一点:

  1. 请参阅http://www.vogella.com/tutorials/EclipsePreferences/article.html#preferences_pluginaccess

  2. 使用.getPluginPreferences()。例如,有一个插件类“com.xxx.TestPlugin”,它扩展了org.eclipse.ui.plugin.AbstractUIPlugin.Plugin,以便访问TestPlugin的首选项。插件代码可以在下面:

  3. 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();

祝你好运。