Merge branch 'patch/JAL-4298_synchronize_consoledoc' into develop
[jalview.git] / src / jalview / gui / Console.java
index b8aad21..cb60a3f 100644 (file)
@@ -50,6 +50,7 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
 import javax.swing.border.Border;
 import javax.swing.text.DefaultCaret;
 
@@ -621,11 +622,7 @@ public class Console extends WindowAdapter
         {
           try
           {
-            this.wait(100); // ##### implicated BLOCKED
-            if (pin.available() == 0)
-            {
-              trimBuffer(false);
-            }
+            this.wait(100);
           } catch (InterruptedException ie)
           {
             jalview.bin.Console.debug("pin.available() error", ie);
@@ -686,27 +683,23 @@ public class Console extends WindowAdapter
           // check string buffer - if greater than console, clear console and
           // replace with last segment of content, otherwise, append all to
           // content.
-          long count;
           while (displayPipe.length() > 0)
           {
-            count = 0;
             StringBuffer tmp = new StringBuffer(), replace;
             synchronized (displayPipe)
             {
               replace = displayPipe;
               displayPipe = tmp;
             }
-            // simply append whole buffer
-            synchronized (textArea.getDocument())
+            // Append formatted message to textarea using the Swing Thread.
+            SwingUtilities.invokeLater(new Runnable()
             {
-              textArea.append(replace.toString()); // ##### implicated BLOCKED
-              count += replace.length();
-              if (count > byteslim)
+              public void run()
               {
+                textArea.append(replace.toString());
                 trimBuffer(false);
               }
-            }
-
+            });            
           }
           if (displayPipe.length() == 0)
           {
@@ -715,7 +708,14 @@ public class Console extends WindowAdapter
               this.wait(100);
               if (displayPipe.length() == 0)
               {
-                trimBuffer(false);
+                // post a trim on Swing Thread.
+                SwingUtilities.invokeLater(new Runnable()
+                {
+                  public void run()
+                  {
+                    trimBuffer(false);
+                  }
+                });
               }
             } catch (InterruptedException e)
             {
@@ -777,9 +777,7 @@ public class Console extends WindowAdapter
       @Override
       public void run()
       {
-        displayPipe.append(input); // change to stringBuffer
-        // displayPipe.flush();
-
+        displayPipe.append(input); 
       }
     });
     // stderr.println("Time taken to Spawnappend:\t" + (System.nanoTime() -