Skip to content

"Graphic is disposed" on Windows with pull/1496 #1639

@tobiasmelcher

Description

@tobiasmelcher

#1496 introduces an incompatibility which breaks existing implementations.

Following pattern is used where the base image is disposed directly after creating an instance of DecorationOverlayIcon.

Image tempImage = descriptor.createImage();

ImageDescriptor[] overlaysArray = new ImageDescriptor[6];
overlaysArray[IDecoration.BOTTOM_LEFT] = getDecorator(stateDecoratorLocation);
overlaysArray[IDecoration.TOP_RIGHT] = getDecorator(testPoolDecoratorLocation);

image = new DecorationOverlayIcon(tempImage, overlaysArray).createImage();
tempImage.dispose();  // <!--------------------------
this.imageCache.put(imageId, image);

This produces now a "Graphic is disposed" exception on Windows with following stack:

org.eclipse.swt.SWTException: Graphic is disposed
              at org.eclipse.swt.SWT.error(SWT.java:4922)
              at org.eclipse.swt.SWT.error(SWT.java:4837)
              at org.eclipse.swt.SWT.error(SWT.java:4808)
              at org.eclipse.swt.graphics.Image.getImageData(Image.java:1380)
              at org.eclipse.jface.resource.CompositeImageDescriptor$CachedImageImageDataProvider.getImageData(CompositeImageDescriptor.java:114)
              at org.eclipse.jface.resource.CompositeImageDescriptor.getZoomedImageData(CompositeImageDescriptor.java:457)
              at org.eclipse.jface.resource.CompositeImageDescriptor.drawImage(CompositeImageDescriptor.java:267)
              at org.eclipse.jface.viewers.DecorationOverlayIcon.drawCompositeImage(DecorationOverlayIcon.java:217)
              at org.eclipse.jface.resource.CompositeImageDescriptor.getImageData(CompositeImageDescriptor.java:375)
              at org.eclipse.swt.internal.DPIUtil.lambda$2(DPIUtil.java:543)
              at org.eclipse.swt.internal.DPIUtil.getElementAtZoom(DPIUtil.java:572)
              at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:543)
              at org.eclipse.swt.graphics.Image.getImageMetadata(Image.java:768)
              at org.eclipse.swt.graphics.Image.getBounds(Image.java:1306)
              at org.eclipse.swt.graphics.Image.getBounds(Image.java:1301)
              at org.eclipse.swt.internal.ImageList.add(ImageList.java:61)
              at org.eclipse.swt.widgets.Button._setImage(Button.java:144)
              at org.eclipse.swt.widgets.Button.setImage(Button.java:875)

Could you please improve the enhancements of #1496 so that this exception does no longer occur?

Thanks and best regards,
Tobias

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions