-
Notifications
You must be signed in to change notification settings - Fork 0
Labels
Milestone
Description
We again face "Graphics is disposed" errors, see eclipse-platform/eclipse.platform.swt#1639:
org.eclipse.swt.SWTException: Graphic is disposed
at org.eclipse.swt.SWT.error(SWT.java:4932)
at org.eclipse.swt.SWT.error(SWT.java:4847)
at org.eclipse.swt.SWT.error(SWT.java:4818)
at org.eclipse.swt.graphics.Image.getImageData(Image.java:1400)
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:538)
at org.eclipse.swt.internal.DPIUtil.getElementAtZoom(DPIUtil.java:567)
at org.eclipse.swt.internal.DPIUtil.validateAndGetImageDataAtZoom(DPIUtil.java:538)
at org.eclipse.swt.graphics.Image$ImageDataProviderWrapper.getBounds(Image.java:2188)
at org.eclipse.swt.graphics.Image.getBounds(Image.java:1322)
at org.eclipse.swt.graphics.Image.getBounds(Image.java:1312)
at org.eclipse.swt.widgets.Button.computeSizeInPixels(Button.java:361)
The can be reproduced with the following snippet at 200% (primary) monitor zoom:
public class Snippet1 {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Test");
shell.setSize(300, 200);
Image tempImage = new Image(display, 20, 20);
ImageDescriptor[] overlaysArray = new ImageDescriptor[6];
Image image = new DecorationOverlayIcon(tempImage, overlaysArray).createImage();
tempImage.dispose();
Button button = new Button(shell, SWT.PUSH);
button.setImage(image);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
image.dispose();
display.dispose();
}
}Issue needs to be fixed and we should add a regression test to avoid that we will run into the issue again.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
✅ Done