如何在Eclipse插件项目中管理资源(图像,字体,颜色)?

时间:2017-01-19 02:49:49

标签: java eclipse eclipse-plugin swt jface

我的Eclipse插件项目有一些图像并使用了一些字体。所以我创建了一个名为getFriends()的单例类来管理图像,这可以使图像对象成为整个项目中的单个对象。

但它并不完美,我无法在合适的时间处理图像。因此,我需要一种更好的机制来管理这些资源,包括图像,字体,颜色等。

1 个答案:

答案 0 :(得分:1)

JFace提供ResourceManager类来帮助创建和处理图像,字体和颜色。

对于每种资源类型,还有相应的资源描述符:ImageDescriptorFontDescriptorColorDescriptor。资源描述符是轻量级对象,它引用图像/字体/颜色而不占用操作系统资源。

资源描述符能够创建实际资源,例如:

ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL( "..." );
Image image = imageDescriptor.createImage();

ResourceManager能够从资源描述符创建和缓冲资源,并释放它在处置时直接创建的所有资源。

专用资源管理器LocalResourceManager可以附加到SWT控件,并在处理控件时处理。

资源管理器也可以嵌套,以便子资源管理器可以重用以前由其父资源管理器之一分配的资源。

如果您的插件具有扩展AbstractUIPlugin的插件激活器,则您已经可以通过AbstractUIPlugin::getImageRegistry()访问映像注册表。重写initializeImageRegistry()方法以填充注册表。避免使用ImageRegistry::get(),因为此方法会分配一个无法释放的图像,并且会在插件的整个生命周期内保留。

大多数工作台API使用资源描述符,例如Action::setImageDescriptor()IEditorInput::getImageDescriptor()。如果应用程序代码使用资源,请遵循此惯例,并优先使用资源描述符而不是实际资源。只在需要时创建资源,并在不再需要时立即处理它们。

本文包含使用SWT资源时的一些一般规则:https://www.eclipse.org/articles/swt-design-2/swt-design-2.html