前文回顾:

插件学习篇

简单的建立插件工程以及模型文件分析

利用扩展点,开发透视图

SWT编程须知

SWT简单控件的使用与布局搭配

SWT复杂空间与布局搭配

7 SWT布局详解

  前几篇讲解了SWT的基本知识。这篇作为穿插,讲述一下工作终于到的一个问题,并且借着这个机会,好好的学习了一下!

  先描述下我遇到的问题吧:

  由于对插件的了解也并不全面,很多知识点都不知道。学习其他人的开源源码时,我遇到了下面的报错:

  org.eclipse.jface.resource.DataFormatException
at org.eclipse.jface.resource.StringConverter.asRGB(StringConverter.java:)
at com.xxxxxx.rcp.dbeditor.util.EditorColorProvider.getToken(EditorColorProvider.java:)

  根据报错提示的位置,以及调试发现,是有colorName为空,从而无法进行转换

 public IToken getToken(String prefKey) {
System.out.println(store.getString(prefKey));
Token token = (Token) tokenTable.get(prefKey);
if (token == null) {
String colorName = store.getString(prefKey);
RGB rgb = StringConverter.asRGB(colorName);
token = new Token(new TextAttribute(getColor(rgb)));
tokenTable.put(prefKey, token);
}
return token;
}

  追踪堆栈,发现这个store根本没有任何getString的方法以及map类型的存储集合。

  很费解这个对象时怎么回事,于是再重新学习源码,各种比对,发现都是相同的。

  并且这个对象时在插件初次加载的start函数通过getPreferenceStore()进行初始化的。

  那么就奇怪了,一样的代码过程,为什么源码可以查找到值,而我的却不行呢?

  于是查看IPreferenceStore接口的源码,查找它的实现类,并没有任何收获!

  无奈之下,只能百度了!

  

  于是,万能的百度再次立功了,原来是首选项中配置的内容。也就是说与手写的代码其实是分离的,它是在扩展点org.eclipse.core.runtime.preferences中扩展的一个初始化函数。

  知道了原因,那么就好好研究下吧!

  IPregerenceStore

  它是eclipse基于字符串的一个键值存储结构,也就是说,以String类型为主键,存储其他类型。它在插件加载的时候进行执行,并且存储在本地。可以同过getPregerenceStore()获取这个对象,通过setDefault方法进行赋值。

  接下来看一下这个对象的使用方法吧!

  1 在扩展点中扩展org.eclipse.core.runtime.preferences

  2 新建一个 initializer ,并且指定实现一个初始化的类

  3 创建IPreferenceStore对象,并设定初始化值

 import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.jface.preference.IPreferenceStore; import testpreference.Activator; public class AbstractPreferenceInitializer1 extends
AbstractPreferenceInitializer { public AbstractPreferenceInitializer1() {
// TODO Auto-generated constructor stub
} @Override
public void initializeDefaultPreferences() {
IPreferenceStore store = Activator.getDefault().getPreferenceStore(); store.setDefault(Activator.PREF_PARAM_1, "hello");
store.setDefault(Activator.PREF_PARAM_2, "xingoo");
}
}

  4 在Activator中进行初始化【并实现调用】

public class Activator extends AbstractUIPlugin {
...
public static final String PREF_PARAM_1 = "param_1";
public static final String PREF_PARAM_2 = "param_2"; private IPreferenceStore store; public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
store =getPreferenceStore(); System.out.println("param1"+store.getString(PREF_PARAM_1));
System.out.println("param2"+store.getString(PREF_PARAM_2));
} ...
}

  IPreferenceStore的使用过程大致就是如此了!

  总结起来这次调试过程,归结原因,只能算是自己无知了,学无止境!

【插件开发】—— 8 IPreferenceStore,插件的键/值存储!的更多相关文章

  1. [Swift]LeetCode981. 基于时间的键值存储 | Time Based Key-Value Store

    Create a timebased key-value store class TimeMap, that supports two operations. 1. set(string key, s ...

  2. LeetCode 981.基于时间的键值存储(C++)

    创建一个基于时间的键值存储类 TimeMap,它支持下面两个操作: 1. set(string key, string value, int timestamp) 存储键 key.值 value,以及 ...

  3. SQLite实现内存键值存储

    SQLite数据文件往Linux内存文件系统/dev/shm/data.sqlite3一放,就是内存级读写性能的SQL系统.用SQLite实现内存键值存储:CREATE TABLE IF NOT EX ...

  4. 用于C# 的异步,持久的键值存储 Akavache 使用

    Akavache是​​一个异步的,持久的(即写入磁盘)键值存储,用于在C#中编写桌面和移动应用程序,基于SQLite3.Akavache非常适合存储重要数据(即用户设置)以及过期的缓存本地数据. 开源 ...

  5. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  6. Key-Value键值存储原理初识(NOSQL)

    NO-Sql数据库:Not Only不仅仅是SQL 定义:非关系型数据库:NoSQL用于超大规模数据的存储.(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据).这些类型的数据存储不需要固 ...

  7. PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台

    ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...

  8. [iOS Keychain本地长期键值存储]

    目前本地存储方式大致有:Sqlite,Coredata,NSUserdefaults.但他们都是在删除APP后就会被删除,如果长期使用存储,可以使用Keychain钥匙串来实现. CHKeychain ...

  9. 探索etcd,Zookeeper和Consul一致键值数据存储的性能

    这篇博文是探索三个分布式.一致性键值数据存储软件性能的系列文章中的第一篇:etcd.Zookeeper和Consul,由etcd团队所写,可以让我们全面地了解如何评估三个分布式一致存储软件的性能.翻译 ...

随机推荐

  1. java HashMap的使用

    java HashMap的使用 import java.util.HashMap; import java.util.Iterator; public class WpsklHashMap { pub ...

  2. P1093||T1142 奖学金 洛谷||codevs

    http://codevs.cn/problem/1142/ || https://www.luogu.org/problem/show?pid=1093 题目描述 某小学最近得到了一笔赞助,打算拿出 ...

  3. Populating Next Right Pointers in Each Node (DFS,没想到)

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  4. HashCode和equal方法

    equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值. 而hashCode()是对象或变量通过哈希算法计算出的哈希值. 之所以有hashCode方 ...

  5. Ubuntu 16.04关闭Alt+鼠标左键移动窗口(转)

    1.打开终端,菜单-编辑-配置文件首选项-命令,勾上“以登录Shell方式运行命令”,重启终端. 2.在终端输入 gsettings get org.gnome.desktop.wm.preferen ...

  6. VC++如何折叠代码

    工具-选项,然后在文本编辑器,C/C++中的格式设置,把大纲语句块设置为True   这样之后,还是不能像C#一样使用region折叠代码,但是可以方法和if语句都会自动显示可以折叠.   使用#pr ...

  7. 解决运行scrapy是报错No module named cryptography,解决cryptography的安装问题,解决libffi的安装问题

    在linux下配置完运行是出现ImportError: No module named cryptography.hazmat.bindings.openssl.binding的错误.原因是crapt ...

  8. HTTP协议漫谈 C#实现图(Graph) C#实现二叉查找树 浅谈进程同步和互斥的概念 C#实现平衡多路查找树(B树)

    HTTP协议漫谈   简介 园子里已经有不少介绍HTTP的的好文章.对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将HTTP协议的元素进行分类讲 ...

  9. poj 2585 Window Pains 暴力枚举排列

    题意: 在4*4的格子中有9个窗体,窗体会覆盖它之下的窗体,问是否存在一个窗体放置的顺序使得最后的结果与输入同样. 分析: 在数据规模较小且不须要剪枝的情况下能够暴力(思路清晰代码简单),暴力一般分为 ...

  10. 在云服务器 ECS Linux CentOS 7 下重启服务不再通过 service 操作,而是通过 systemctl 操作

    在云服务器 ECS Linux CentOS 7 下重启服务不再通过 service  操作,而是通过 systemctl 操作. 操作说明如下: 1. 查看 sshd 服务是否启动: 看到上述信息就 ...