title: Java swing repainting while computing: animating sorting algorithm
body: <p><a href="http://www.youtube.com/watch?v=M0cNsmjK33E" rel="nofollow">http://www.youtube.com/watch?v=M0cNsmjK33E</a></p>
  
  <p>I want to develop something similar to the link above using Java Swing. I have the sorting method and did while repaint but when I triggered the sorting, instead of showing the bars slowly sorting itself, it freezes and then unfreezes when the array has been fully sorted.</p>
  
  <p>How do I fix this? 
  Edit: sorry forgot about the codes. its a very simple gui. and another class for sorting which sorts the whole array</p>
  
  <pre><code>public class SortGUI {
  JFrame frame;
  int frameWidth = 1000, frameHeight = 1000;
  int panelWidth, panelHeight;
  DrawPanel panel;
  JPanel panel2;
  JScrollPane scroll;
  JViewport view;
  
  static int[] S = new int[50000];
  
  public static void main(String[] args) throws InterruptedException {
      SortGUI app = new SortGUI();
      initializeArray();        
      app.go(); 
  }
  
  public static void initializeArray()
  {
           for (int i = 0; i &lt; S.length; i++) {
       S[i] = (int) (Math.random() * 16581375);
       }
  }
  
  public void go() throws InterruptedException {
      //Frame
      frame = new JFrame();
      frame.setSize(frameWidth, frameHeight);
      frame.setVisible(true); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
      //panel
      panel = new DrawPanel();
      scroll = new JScrollPane(panel,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
  
  
      //Layout
      frame.add(scroll);
      frame.addKeyListener(new keyListener());
  
      while(true)
      {               
          panel.repaint();
      }
     }
  
  
  public class DrawPanel extends JPanel
  {   
      public DrawPanel()
      {
          this.setPreferredSize(new Dimension(50000,930));
      }
  
      public void paintComponent(Graphics g) 
      {          
          g.setColor(Color.WHITE);
          g.fillRect(0, 0, this.getWidth(), this.getHeight());
          for(int i = 0; i &lt; S.length; i++)
          {
              int red = S[i] / 65025;
              int green = (S[i] &gt; 65025)? S[i] % 65025 : 0;
              int blue = green;
              blue %= 255;
              green /= 255;
  
               g.setColor(new Color(red,green,blue));
              g.fillRect(i, 900 - (S[i] / 18500), 1, S[i] / 18500);
          }
      }
  }
  
    public class keyListener implements KeyListener{
  
  
      public void keyTyped(KeyEvent ke) {
  
      }
  
  
      public void keyPressed(KeyEvent ke) {
        if(ke.getKeyChar() == '1')
        {
     sorter.bubbleSort(S);
        }
      }
  
  
      public void keyReleased(KeyEvent ke) { 
      }
  
    }
  }
  </code></pre>