我的Eclipse插件项目有一些图像并使用了一些字体。所以我创建了一个名为getFriends()
的单例类来管理图像,这可以使图像对象成为整个项目中的单个对象。
但它并不完美,我无法在合适的时间处理图像。因此,我需要一种更好的机制来管理这些资源,包括图像,字体,颜色等。
答案 0 :(得分:1)
JFace提供ResourceManager
类来帮助创建和处理图像,字体和颜色。
对于每种资源类型,还有相应的资源描述符:ImageDescriptor
,FontDescriptor
,ColorDescriptor
。资源描述符是轻量级对象,它引用图像/字体/颜色而不占用操作系统资源。
资源描述符能够创建实际资源,例如:
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