avoid widget is disposed exceptions for termsearch
authorKatja Luther <k.luther@bgbm.org>
Thu, 11 Mar 2021 11:43:35 +0000 (12:43 +0100)
committerKatja Luther <k.luther@bgbm.org>
Thu, 11 Mar 2021 11:43:35 +0000 (12:43 +0100)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/search/facet/term/TermSearchResultComposite.java

index 8cb04a83b1f8a41acb7c73343388c1f691b66107..b7af9ee7ec3f9d081e163fb222bb98f252480c9c 100644 (file)
@@ -118,6 +118,9 @@ public class TermSearchResultComposite extends CheckBoxSearchResultComposite<Abs
                     protected IStatus run(IProgressMonitor monitor) {
                         Collection<URI> mediaUris = new HashSet<>();
                         for (UUID uuid : mediaUuids) {
+                            if (TermSearchResultComposite.this.isDisposed()){
+                                this.cancel();
+                            }
                             Media media = CdmStore.getService(IMediaService.class).load(uuid);
                             if(media==null){
                                 continue;
@@ -135,24 +138,31 @@ public class TermSearchResultComposite extends CheckBoxSearchResultComposite<Abs
                                     // ignore
                                 }
                             }
-                            Composite mediaContainer = new Composite(content, SWT.NONE);
-                            mediaContainer.setLayout(new FillLayout());
-                            for (Image image : imageBuffer) {
-                                Composite composite = new Composite(mediaContainer, SWT.NONE);
-                                composite.addPaintListener(new PaintListener() {
-                                    @Override
-                                    public void paintControl(PaintEvent e) {
-                                        if(image!=null){
-                                            e.gc.setAntialias(SWT.ON);
-                                            e.gc.setInterpolation(SWT.HIGH);
-                                            e.gc.drawImage(image, 0, 0,image.getBounds().width, image.getBounds().height,0, 0, 40, 40);
-                                            e.gc.dispose();
-                                        }
+                            try{
+                                if (!content.isDisposed()){
+                                    Composite mediaContainer = new Composite(content, SWT.NONE);
+                                    mediaContainer.setLayout(new FillLayout());
+                                    for (Image image : imageBuffer) {
+                                        Composite composite = new Composite(mediaContainer, SWT.NONE);
+                                        composite.addPaintListener(new PaintListener() {
+                                            @Override
+                                            public void paintControl(PaintEvent e) {
+                                                if(image!=null){
+                                                    e.gc.setAntialias(SWT.ON);
+                                                    e.gc.setInterpolation(SWT.HIGH);
+                                                    e.gc.drawImage(image, 0, 0,image.getBounds().width, image.getBounds().height,0, 0, 40, 40);
+                                                    e.gc.dispose();
+                                                }
+                                            }
+                                        });
                                     }
-                                });
+                                }
+                            }catch(IllegalArgumentException e){
+                                System.err.println(e.getStackTrace());
+                            }
+                            if (!TermSearchResultComposite.this.isDisposed() && !TermSearchResultComposite.this.getParent().isDisposed()){
+                                TermSearchResultComposite.this.getParent().layout();
                             }
-
-                            TermSearchResultComposite.this.getParent().layout();
                         });
                         return Status.OK_STATUS;
                     }