如何在会话之间存储Eclipse插件状态?

时间:2011-01-24 23:16:40

标签: java eclipse eclipse-plugin

我正在开发一个Eclipse插件。该插件每次在本地保存工作时都会提醒用户将工作保存在中央存储库中。

但是,一旦用户成功将他的作品保存在中央存储库中10次,他将不再被提醒保存他的作品。

这在单个会话中很有效。也就是说,当用户开始在工作区中工作并启用插件时。

但是,如果用户将其工作保存到中央存储库后退出工作区 9次,他将继续被提醒10次,即从头开始,下次他打开他的工作区。

我想知道,如果可以增加一个计数器并将其存储在内存中,那么该插件就可以按预期工作。

2 个答案:

答案 0 :(得分:7)

您可以使用插件设置来存储和检索插件的值 来自Eclipse FAQ的示例:

 private void savePluginSettings() {
  // saves plugin preferences at the workspace level
  Preferences prefs =
    //Platform.getPreferencesService().getRootNode().node(Plugin.PLUGIN_PREFEERENCES_SCOPE).node(MY_PLUGIN_ID);
    new InstanceScope().getNode(MY_PLUGIN_ID); // does all the above behind the scenes

  prefs.put(KEY1, this.someStr);
  prefs.put(KEY2, this.someBool);

  try {
    // prefs are automatically flushed during a plugin's "super.stop()".
    prefs.flush();
  } catch(BackingStoreException e) {
    //TODO write a real exception handler.
    e.printStackTrace();
  }
}

private void loadPluginSettings() {
  Preferences prefs = new InstanceScope().getNode(MY_PLUGIN_ID);
  // you might want to call prefs.sync() if you're worried about others changing your settings
  this.someStr = prefs.get(KEY1);
  this.someBool= prefs.getBoolean(KEY2);
}

答案 1 :(得分:2)

您需要将状态保存到磁盘。有关如何执行此操作的详细信息完全取决于您。有很多方法可以做到这一点。一种方法是使用Eclipse首选项API。它基于不同范围的概念......安装与工作区与项目。我相信InstanceScope类跟踪工作区级别的那些......

http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime/preferences/InstanceScope.html

此API将使您能够以树状结构存储任意内容,然后将其读回。确保树中的第一个节点是您的插件ID,以避免与其他插件发生冲突。