Let AbstractUIPlugin
handle sharing images with your plugins. It has its own ImageRegistry
that handles storing, disposing, and retrieving of images.
A simple override of initializeImageRegistry(ImageRegistry)
and you are on your way to Image sharing bliss.
public class Activator extends AbstractUIPlugin { public static final String ID = "rcp.eclipse"; public static final String MY_IMAGE_ID = "image.myimage"; @Override protected void initializeImageRegistry(ImageRegistry registry) { super.initializeImageRegistry(registry); Bundle bundle = Platform.getBundle(ID); ImageDescriptor myImage = ImageDescriptor.createFromURL( FileLocator.find(bundle, new Path("icons/myImage..gif"), null)); registry.put(MY_IMAGE_ID, myImage); } }
Put your image into workspace/rcp.eclipse/icons/myImage.gif
and then access it in your code.
AbstractUIPlugin plugin = Activator.getDefault(); ImageRegistry imageRegistry = plugin.getImageRegistry(); Image myImage = imageRegistry.get(Activator.MY_IMAGE_ID);
5 comments:
Great thanks !
I was getting a org.eclipse.jface.resource.DeviceResourceException: Unable to create resource FileImageDescriptor when setting the image of an Action with
final String iconPath = FileLocator.toFileURL(
Activator.getDefault().getBundle().getEntry(
"icons/myicon.gif")).getPath();
super.setImageDescriptor(ImageDescriptor.createFromFile(this
.getClass(), iconPath));
No more problems with :
ImageDescriptor myImage = ImageDescriptor.createFromURL(
FileLocator.find(Activator.getDefault().getBundle(),
new Path("icons/myicon.gif"),null));
super.setImageDescriptor(myImage);
Thanks a lot man :)
If NOT using an Activator class and resulting imageRegistry...
ImageDescriptor.createFromURL(FileLocator.find(Platform.getBundle(plugin_id), new Path("icons/imageFileName.xxx"),null);
Hey,
Thanks a lot for the post. It helped me resolve my issue of getting a image to be displayed.
I did not have a activator and have a plugin class instead. And i was earlier trying to get the descriptor as below : (but i never worked)
public static ImageDescriptor getImageDescriptor(String path) {
return AbstractUIPlugin.imageDescriptorFromPlugin("MyPlugin", path);
}
After changing it as below, it worked.
public static ImageDescriptor getImageDescriptor(String path) {
ImageDescriptor myImage = ImageDescriptor.createFromURL(
FileLocator.find(getDefault().getBundle(),
new Path("icons/file.gif"),null));
return myImage;
}
Thanks again !
Hi guys!
I've tried your solution but it throws this bad error. It seems it cannot find the file, but it obviously is inside the jar and in that folder.
org.eclipse.core.runtime - org.eclipse.jface - 0 - /com/views/images/user.gif
java.io.FileNotFoundException: /com/views/images/user.gif
at org.eclipse.osgi.framework.internal.protocol.bundleentry.Handler.findBundleEntry(Handler.java:44)
at org.eclipse.osgi.framework.internal.core.BundleResourceHandler.openConnection(BundleResourceHandler.java:175)
What am I missing?
Thank you so much! This was great help! I had been struggling to incorporate this feature for a couple of days!
Post a Comment