精彩的人生

好好工作,好好生活

BlogJava 首页 新随笔 联系 聚合 管理
  147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks

#

其实很多人都问到了这个问题。目前插件的安装是需要重启的,但是很多情况下是有不重启而安装插件的需求。我找到的一点资料,应该会有帮助



FAQ How do I make my plug-in dynamic aware?

From Eclipsepedia




Dynamic awareness requires extra steps that were not required prior to the introduction of dynamic plug-ins. Dynamic awareness requires that you remove all references to classes defined in other plug-ins when those plug-ins are removed from the system. In particular, if your plug-in defines extension points that load classes from other plug-ins—executable extensions—you need to discard those references when other plug-ins are dynamically removed. The extension registry allows you to add a listener that notifies you when extensions are being added or removed from the system. If your plug-in maintains its own cache of extensions that are installed on your extension point, your listener should update this cache for each added or removed extension.



The following is an example of a simple class that maintains its own cache of the set of extensions installed for a given extension point. This example is a bit contrived as simply caching the extension objects has no value. Typically, your plug-in will process the extensions to extract useful information and possibly load one or more classes associated with that extension. The basic structure of this cache example is as follows:

   public class ExtCache implements IRegistryChangeListener {
      private static final String PID = "my.plugin";
      private static final String PT_ID = 
         PID + "." + "extension.point";
      private final HashSet extensions = new HashSet();
      ...
   }

The extensions field stores the set of installed extensions for a particular extension point.



The cache has a startup method that loads the initial set of extensions and then adds an extension registry listener in order to be notified of future changes:

   public void startup() {
      IExtensionRegistry reg = Platform.getExtensionRegistry();
      IExtensionPoint pt = reg.getExtensionPoint(PT_ID);
      IExtension[] ext = pt.getExtensions();
      for (int i = 0; i < ext.length; i++)
         extensions.add(ext[i]);
      reg.addRegistryChangeListener(this);
   }

The class implements the IRegistryChangeListener interface, which has a single method that is called whenever the registry changes:

   public void registryChanged(IRegistryChangeEvent event) {
      IExtensionDelta[] deltas = 
                          event.getExtensionDeltas(PID, PT_ID);
      for (int i = 0; i < deltas.length; i++) {
         if (deltas[i].getKind() == IExtensionDelta.ADDED)
            extensions.add(deltas[i].getExtension());
         else
            extensions.remove(deltas[i].getExtension());
      }
   }

This class is now dynamic aware but is not yet dynamic enabled; that is, the class does not yet support itself being dynamically removed. The final step is to implement a shutdown method that clears all values from the cache and removes the listener from the extension registry:

   public void shutdown() {
      extensions.clear();
      IExtensionRegistry reg = Platform.getExtensionRegistry();
      reg.removeRegistryChangeListener(this);
   }

This shutdown method must be called from the shutdown method of the plug-in that defines the cache. For the complete source code of this example, see the ExtCache class in the FAQ Examples plug-in.



Note that not only extensions points acquire and maintain references to classes defined in other plug-ins. You need to be especially aware of static fields and caches that contain references to objects whose class is defined in other plug-ins.

If you hold onto classes defined in other plug-ins through different mechanisms, you also need to discard those references when those other plug-ins are removed.


原文地址:http://wiki.eclipse.org/index.php/FAQ_How_do_I_make_my_plug-in_dynamic_aware%3F

posted @ 2006-03-23 11:16 hopeshared 阅读(2569) | 评论 (0)编辑 收藏

添加我到您的MSN Messenger 

似乎仍然有bug

源代码:
<script src="http://edad.com.cn/datou/msn.js" type="text/javascript" language="JavaScript"></script>

<a href=javascript:DoInstantMessage("[MSN帐户(例如billgaisi@hotmail.com)]","Bill Gaisi")><img border="0" src="http://edad.com.cn/datou/icon_messenger.gif" alt="添加我到您的MSN Messenger"></a>

转自http://www.cathome01.com/asiapan/archives/2005/07/msn_messenger.html

posted @ 2006-03-21 12:45 hopeshared 阅读(143) | 评论 (0)编辑 收藏

MSN Messenger 6.0 这个版本中相比以前增加了很多激动人心的功能,如:更漂亮的界面,更多的表情符号,可设置个人头像,聊天窗口的背景图片支持,P2P功能支持,联机游戏等,在这个版本中增强了的标签功能,对于广大 MSN Messenger 爱好者来说,尤其带来了许多乐趣,本文将主要对 MSN Messenger 的标签的使用和开发进行探讨。


什么是 MSN Messenger 标签? 


MSN Messenger 标签是对 MSN Messenger 功能的一种扩展,如图1所示。MSN Messenger 已经内置了许多功能扩展,如 MSN Alerts等 .NET My Services ,除此之外,还将 www.msn.com 提供的许多个性服务都集成到 MSN Messenger 里面了,如股票行情、新闻、旅游、汽车、购物、游戏等。 



除了这些内置的标签之外,我们还可以增加自己特殊的标签,将常用的一些在线功能(阅读新闻、查看天气预报等)集成到 MSN Messenger 中,将其变为一个功能丰富而强大的客户端工具。笔者曾经见到过 Microsoft 演示新加坡政府的电子政务系统,就是将许多客户端的功能置入 MSN Messenger 的标签中,为工作人员提供了一个使用极其方便的工具。 



(注:默认情况下,MSN Messenger 标签只有两个,要想显示全部内置标签,用户需要在 www.passport.net 登录,并在Member Services 中修改 Profile 文件,将自己的 Country/Region 修改为美国,或者直接下载此文件: ::URL::http://www.china-actuary.com/temp/configcache.zip  ,解开后覆盖原配置文件即可,原配置文件的路径在下文列出) 




如何增加标签 




MSN Messenger 中所有标签都是定义在一个 XML 配置文件中,这个文件位于 C:\Documents and Settings\[User]\Application Data\Microsoft\MSN Messenger\[Passport ID] 目录下,如果安装的是 MSN Messenger 6.0中文版,则可能位于 C:\Documents and Settings\[USER]\Application Data\Microsoft\MSN Messenger下面的目录名是一串数字的子目录中,文件名为 ConfigCache.xml(注: [User] 是登录 Windows 系统的用户名,Passport ID 是指登录 MSN Messenger 的ID,如 muslem@msn.com,另外,如果你的 Windows 系统安装在 C: 以外的其它驱动器,则上述路径要做相应改变)。


打开这个 XML 文件,就可以看到在 \MsgrConfig\TabConfig\msntabdata 节点内就是所有标签的定义,现举例对其中的主要元素加以说明: 



<tab>
  <image>res:moneyimage>
  <name>CNBC on MSN Moneyname>
  <tooltip>CNBC on MSN Moneytooltip>
  <contenturl>::URL::http://moneycentral.msn.com/messenger/tab.aspxcontenturl>
</tab> 




了解了标签的定义方式后,我们就可以定义自己的标签了,考虑到 MSN Messenger 窗口的大小和 PocketPC 或 Palm 等PDA 类似,所以适合 PDA 的网站置入到标签中比较合适。例如我们把新浪站点的 PDA版(::URL::http://pda.sina.com.cn)做成一个标签,则应定义如下一个  XML 结点:


<tab>
   <image>res:bellimage>
   <name>SINA PDAname>
   <tooltip>SINA PDA Sitetooltip>
   <contenturl>::URL::http://pda.sina.com.cncontenturl>
</tab>




然后将结点定义的全部文本插入到配置文件的 \MsgrConfig\TabConfig\msntabdata 节点里面,注销并重新登录 MSN Messenger ,则效果图2所示。

除此之外,在 PDA 上很受欢迎的 AvantGO 频道都可以作为标签内容的来源,在 ::URL::http://www.avantgo.com  中注册登录后,会列出各种各样的频道及其 URL 地址,然后就可以自己的需要选择利用了。


如何开发标签




除了引用已有的站点,如AvantGO频道或PDA站点外,能不能制做自己的功能标签呢?答案是完全肯定的,可以看到,标签配置中的 ContentURL 既可以引用外部 URL 资源,也可以引用本地资源,最常用的就是引用本地的 HTML 文件。

利用 HTML 文件,你的所有与 HTML 有关的开发技术/技巧都能派上用场,如CSS、HTML Component、VBScript/JavaScript、Java Applet、DHTML,ActiveX,MSXML(包括XMLHttp组件),XSLT等。如果是开发一个内容采集(如新闻或天气预报信息抓取)的标签,则一般要经过以下步骤:

1、寻找内容来源,此页面一般要求格式相对固定,如新浪的滚动新闻页面等 



2、利用 MSXML 包中的 XMLHttp 对象来获取内容 



3、在本地利于脚本结合 HTML DOM(文档对象模型)技术对获取的内容进行分析和过滤,取出有用内容 



4、以适合的方式显示这些的内容,并可以结合 CSS 进行内容的格式化 




另外,如果引用本地的 HTML 文件,则脚本安全性级别较低,对本地文件系统进行读写是允许的,因此开发一些具有高级特性的应用,如本地缓存内容,显示本计算机的某些信息(如 Outlook 的邮件,联系人列表等)。


下图是笔者开发的一个标签的实例,主要功能是查阅新闻、电视节目单、天气预报等,可以从 ::URL::http://www.china-actuary.com/temp/rordown.asp  下载,通过阅读里面的内容和程序脚本来进一步了解如何开发标签。


除此之外,可以利于 Windows 系统和第三方丰富的组件和控件,尝试进行一些MSN Messenger 标签的高级开发,如利用 JMail 组件来读取 POP3 邮箱的内容或发送邮件;利用通讯网关发送手机短消息;利用 XML 解析器来读取和显示 RSS 内容;甚至可以通过 MSXML 中的 XMLHTTP 来读取 Hotmail/MSN 邮箱中的内容,使用 ADO 来存取数据库信息等,当然开发人员也可以将此功能延伸到企业应用开发中,如小组协作,日程安排等。


开发标签注意事项




1、图标的引用

标签的图标即可以采用内置的资源图标,也可以引用外部(URL形式,如 ::URL::http://www.china-actuary.com/temp/news.png)的  PNG 文件(必须是32位色),图标大小为 32X32,也可以使用 ResHacker 等工具将自己的图标加入到 MSN Messenger 可执行文件 MsnMsgr.exe 中,然后使用 res:[ID] 的方式来引用。 



2、界面开发

由于标签的内容显示在 MSN Messenger 窗口的内部,所以在界面开发时要注意以下原则:

1) 标签中元素的采用相对大小,而非绝对大小。这样当 MSN Messenger 窗口缩放的时候,里面的内容能够自适应地进行调整。此外如果可能,对超过窗口宽度的内容进行手工缩放(在笔者的例子里,对新闻中的图片进行了缩放,以便能够在任意大小的窗口都看到全图),从而避免出现水平滚动条。

2) 使用小字体,以显示更多内容

3) 使用元素的边框和间隔不要太大,不要采用较大的图片按钮

4) 使用简单控件

5) 尽量避免重新刷新整个页面

3、程序的开发与调试

可以使用常用的 HTML/VBScript/Jscript 开发工具,结合 Internet Explorere 进行测试,测试无误后再加入到 MSN Messenger 的标签中,要不然每次更改页面后都要重新登录 MSN Messenger ,无疑是一件很痛苦的事。 



4、配置文件与标签图标

经常发现登录 MSN Messenger 后,除了最上面好友列表的标签外,其它标签到都不见了,此问题一般都是错误地修改 ConfigCache.xml 文件而使其成为一个不合法的 XML 文件导致的。所以在修改此文件后,最好使用 Internet Explorer 打开查看一下,以确认 XML 文件的格式无误。 



另外,有时候即使不修改配置文件,标签也会“消失”,这是由于 MSN Messenger 自动更新配置文件而覆盖和自定义的标签,要防止此类情况,最好将配置文件中的过期设置元素的值改为0,即:0。


另外,msn shell也可以实现此功能,而且功能更为强大



原文地址:http://www.blogcn.com/user31/nhdj/blog/7190344.html
posted @ 2006-03-21 12:32 hopeshared 阅读(489) | 评论 (0)编辑 收藏

以前做的RCP没有注意如何将外观作漂亮,都作为遗留问题保存了下来

今天在Eclipse社区找到了答案,贴上来做个备份.

原文地址:http://www.eclipseworld.org/bbs/read.php?tid=2689&keyword=


问题:
不好意思,刚开始看RCP,有个小问题,怎么样才能把外观设置为和


上图中,‘系统主菜单’这里的tab一样,带有圆弧形,而不是rcp默认的方的那种样式呢?

答:

得把org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false加在plugin_customization.ini里头

plugin_customization.ini还可以定制不少东西,这个文件要自己创建的吧,RCP程序里面没有

在plugin.xml,org.eclipse.core.runtime.products下的产品加上一个属性。
name: preferenceCustomization
value: plugin_customization.ini

然后在工程中加上plugin_customization.ini 这文件。内容是:
org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false

posted @ 2006-03-16 16:34 hopeshared 阅读(1446) | 评论 (1)编辑 收藏

     摘要: 本文档取自IBM Websphere的帮助文档 此方案集由名为 Plants by WebSphere 的在线零售商设计。 Plants by WebSphere 使用 WebSphere Application Server 中的 Web service ...  阅读全文
posted @ 2006-03-15 15:34 hopeshared 阅读(762) | 评论 (0)编辑 收藏

仅列出标题
共30页: First 上一页 15 16 17 18 19 20 21 22 23 下一页 Last