应用场景:在打开的编辑器中创建类图,每打开一次都要用到类图、字体、颜色资源。
分析原因:
1.在eclipse中图片、字体、颜色都属于org.eclipse.swt.graphics.Resource资源。
public final class Image extends Resource implements Drawable{...}
public final class Font extends Resource{....}
public final class Color extends Resource {...}
而该类型明确说明
* Application code must explicitly invoke the <code>Color.dispose()</code>
* method to release the operating system resources managed by each instance
* when those instances are no longer required.
意思就是说当这些资源实例不在使用的时候,必须调用dispose释放掉。即遵循了谁创建谁负责的原则。
Java开发人员在使用SWT/JFACE的时候,并不能借助于Java内置的垃圾回收机制来彻底完成系统资源的清理(Java虚拟机只能帮助我们释放虚拟机内存中的系统资源句柄引用对象)。
所以当我们在程序中大量的创建资源实例,就会引起大量句柄,导致资源句柄不够用,引发no more handles异常。所以不允许每次都new image/create image或其他资源。
解决办法:
JFaceResources是JFace中的资源管理门面类,由它获取我们的图片、字体、颜色并进行缓存,相应的处理方法如下
JFaceResources.getImageRegistry();
JFaceResources.getFontRegistry();
JFaceResources.getColorRegistry();
以上三个方法都使用了map对资源进行了缓存,所以你只需要put一次,在其他地方get就
ok了。
比如:
/*** 懒加载的方式添加Image资源的处理*@param imageFilePath@return*/
public static Image imageFromPlugin(String imageFilePath) { Image image = JFaceResources.getImageRegistry().get(imageFilePath); if(image != null) { return image; } else { ImageDescriptor imageDescriptorFromPlugin = imageDescriptorFromPlugin(PLUGIN_ID(本插件的ID), imageFilePath); image = imageDescriptorFromPlugin.createImage(); JFaceResources.getImageRegistry().put(imageFilePath, image); return image; } }
使用这种方式时,注意一点,Activator中的stop方法手动将资源管理器中的资源释放掉:
public void stop(BundleContext bundleContext) throws Exception { JFaceResources.getImageRegistry().dispose(); Activator.context = null; plugin = null; }
此后在使用图片资源时,都使用了这种方式,通过Activator. imageFromPlugin(imageFilePath)获取Image对象。
当然有些接口中要求返回的是ImageDescriptor,直接调用
ImageDescriptor org.eclipse.ui.plugin.AbstractUIPlugin.imageDescriptorFromPlugin(String pluginId, String imageFilePath)
方法即可,不会造成No more handlers错误。
分享到:
相关推荐
RCP(Rich Client Platform)和SWT(Standard Widget Toolkit)是Eclipse插件开发中的核心概念。 RCP是Eclipse提供的一种用于构建复杂桌面应用程序的框架。它基于OOP(面向对象编程)原则,提供了可扩展性、模块化...
通过RCP,开发者可以专注于业务逻辑,而UI组件和框架已经由RCP提供,大大提高了开发效率。 **RCP核心特性** 1. **插件化架构**:RCP的核心是插件(Plugin)系统,每个功能模块都可以作为一个独立的插件存在,便于...
本实例项目"基于SWT、JFace的Rcp开发实例"旨在帮助初学者理解如何利用SWT和JFace这两个关键组件来构建RCP应用程序。 SWT(Standard Widget Toolkit)是Java中的一个GUI库,它提供了一套与操作系统紧密集成的控件,...
5. **源代码分析**:在"**EclipseSWT_JFace_RCP插件开发**"的源代码中,我们可以期待找到如何使用SWT和JFace创建用户界面,以及如何利用RCP框架构建可扩展应用的示例。开发者可能通过这些代码学习到如何组织插件结构...
"使用Eclipse RCP进行桌面程序开发(五):2D绘图.doc"涵盖了在RCP应用中进行2D图形绘制的技术,这可能涉及到使用SWT(Standard Widget Toolkit)和JFace库提供的绘图API,创建自定义的图表或者可视化效果。...
Eclipse RCP(Rich Client Platform)是基于Java的开发框架,用于构建桌面应用程序。它提供了构建用户界面所需的各种组件和工具,允许开发者创建功能丰富的、交互式的应用程序。Eclipse RCP利用Eclipse IDE的强大...
**正文** 在IT行业中,RCP(Rich Client Platform)是一种基于Java的开发框架,由Eclipse项目提供...记得实践是检验真理的唯一标准,多动手实践,遇到问题时查阅文档和社区资源,相信你会在RCP开发的道路上越走越远。
【RCP开发指南】 RCP,全称Rich Client Platform,是一种基于Eclipse框架的桌面应用程序开发平台。它允许开发者创建出具有丰富用户界面和高度可扩展性的独立应用程序。RCP平台是Eclipse从3.0版本开始引入的概念,...
### 定制SWT RCP界面—如何编写一个漂亮的SWT RCP界面 #### 引言 在现代软件开发中,用户界面(UI)的设计至关重要。一个美观且易用的界面不仅能提升用户体验,还能增强软件的整体竞争力。SWT (Standard Widget ...
Eclipse是一款广泛使用的开源集成开发环境(IDE),它以其强大的可...通过学习和实践Eclipse插件及RCP开发,开发者不仅可以提升自己的技能,还能创建出功能丰富、高度定制化的开发环境或桌面应用,服务于各种业务需求。
**RCP(Rich Client Platform)开发实例源码详解** RCP,全称为Rich Client Platform,是Eclipse基金会推出的一种客户端应用程序开发框架。它为开发者提供了一个可扩展的平台,用于构建功能丰富的桌面应用,具有...
**Eclipse RCP 开发教程** Eclipse Rich Client Platform (RCP) 是一个用于构建桌面应用程序的框架,它基于 Eclipse IDE 平台,允许开发者利用 Eclipse 的强大功能和丰富的插件系统来创建自定义的、可扩展的应用...
Eclipse RCP 开发资料打包下载 目录如下: RCP程序设计.pdf(推荐) Addison.Wesley.Eclipse.Rich.Client.Platform.Designing.Coding.and.Packaging.Java.Applications.Oct.2005.chm Eclipse+RCP入门.pdf example_...
《RCP开发入门》这本书籍正是针对这一主题,帮助初学者掌握Eclipse RCP的开发技术。 首先,我们要了解RCP的基础概念。Eclipse RCP的核心在于插件(Plugin)系统,每个插件都是一个独立的功能模块,它们通过接口互相...
eclipse RCP Plug-in开发自学教程 eclipse RCP(Rich Client Platform)是一种基于eclipse的插件式开发平台,允许开发者使用eclipse结构风格设计弹性的可扩展的应用程序。RCP插件式开发方式可以重用eclipse中的方法...
以及Eclipse RCP扩展的使用和扩展点的开发,掌握这些技术知识的读者将能构建一个结构完整的Eclipse RCP软件,并解决软件开发过程中遇到的故障;实战篇(第13-15章)详细讲解了Eclipse RCP与Spring OSGi框架、...
本篇文章将详细介绍如何利用Eclipse RCP开发一个简单的MySQL客户端工具,这对于想要深入理解Eclipse RCP框架以及插件开发的开发者来说是非常有帮助的。 首先,我们需要了解Eclipse RCP的基础。Eclipse RCP的核心...
### Eclipse 3.6 RCP 开发知识点概览 #### 1. 富客户端平台 (RCP) 概述 **1.1 概述** - **定义**: Eclipse Rich Client Platform (RCP) 是一种基于Java的技术框架,用于构建可扩展的桌面应用程序。 - **特点**: ...
本教程将通过实例引导你深入理解Eclipse RCP的开发过程,帮助你掌握如何利用Eclipse的强大功能来创建自定义的、功能丰富的桌面应用。 一、Eclipse RCP基础 Eclipse RCP的核心概念包括部件(Parts)、视图(Views)...