JAL-1155 fix panel length calculation for grouped graphs and refactor to alignment...
[jalview.git] / src / jalview / workers / ConservationThread.java
index 7d5c661..194c389 100644 (file)
@@ -1,18 +1,18 @@
 /*
  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
  * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
- * 
+ *
  * This file is part of Jalview.
- * 
+ *
  * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
+ * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- * 
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  * PURPOSE.  See the GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  */
 package jalview.workers;
@@ -31,29 +31,30 @@ public class ConservationThread extends AlignCalcWorker implements AlignCalcWork
 {
 
   private int ConsPercGaps = 25; // JBPNote : This should be a configurable property!
-  
+
   public ConservationThread(AlignViewportI alignViewport, AlignmentViewPanel alignPanel)
   {
     super(alignViewport, alignPanel);
     ConsPercGaps = alignViewport.getConsPercGaps();
   }
-  
+
   private Conservation cons;
   AlignmentAnnotation conservation,quality;
   int alWidth;
+  @Override
   public void run()
   {
     try
     {
       calcMan.notifyStart(this); // updatingConservation = true;
 
-      while (!calcMan.notifyWorking(this)) 
+      while (!calcMan.notifyWorking(this))
       {
         try
         {
           if (ap != null)
           {
-            ap.paintAlignment(false);
+            // ap.paintAlignment(false);
           }
           Thread.sleep(200);
         } catch (Exception ex)
@@ -71,21 +72,27 @@ public class ConservationThread extends AlignCalcWorker implements AlignCalcWork
       ourAnnot.add(conservation);
       ourAnnot.add(quality);
       ourAnnots = ourAnnot;
-      
+
       // AlignViewport.UPDATING_CONSERVATION = true;
-      
+
       if (alignment==null || (alWidth=alignment.getWidth())< 0)
       {
         calcMan.workerComplete(this);
         //.updatingConservation = false;
         //AlignViewport.UPDATING_CONSERVATION = false;
-        
+
         return;
       }
-
+      try {
       cons = Conservation.calculateConservation("All",
               jalview.schemes.ResidueProperties.propHash, 3,
               alignment.getSequences(), 0, alWidth - 1, false, ConsPercGaps, quality!=null);
+      } catch (IndexOutOfBoundsException x)
+      {
+        // probable race condition. just finish and return without any fuss.
+        calcMan.workerComplete(this);
+        return;
+      }
       updateResultAnnotation(true);
     } catch (OutOfMemoryError error)
     {
@@ -114,6 +121,6 @@ public class ConservationThread extends AlignCalcWorker implements AlignCalcWork
   public void updateAnnotation()
   {
     updateResultAnnotation(false);
-    
+
   }
 }