public void run()
  {
    int nCurrentChar = 0;

    Graphics g = getGraphics();
    g.setFont(fnt);
    FontMetrics fm = g.getFontMetrics();
    
    int nMaxCharWidth = fm.charWidth('W') + 5;
    int yPos = fm.getHeight() + 5;
    int nCurrentCharWidth;
    
    int rColor = (int)(255 * Math.random());
    int gColor = (int)(255 * Math.random());
    int bColor = (int)(255 * Math.random());
    g.setColor(new Color(rColor, gColor, bColor));
          
    while (true)
    {
      try
      {
         try
         {
           nCurrentCharWidth = 
             fm.charWidth(ScrollingText.charAt(
	     nCurrentChar));

           char[] ch;
           String s;
           ch = new char[1];
           ch[0] = 
	     ScrollingText.charAt(nCurrentChar);
           s = new String(ch);

           g.drawString(s, 
             dimMinSize.width - nMaxCharWidth,
	     yPos);

           nCurrentChar++;

           for(int i = 0; i < nCurrentCharWidth; i++)
           {
             g.copyArea(nMaxCharWidth / 2, 0,
               dimMinSize.width - nMaxCharWidth +
	       nCurrentCharWidth - i, 
               dimMinSize.height,
               -1, 0);
 
             g.clearRect(
               dimMinSize.width - nMaxCharWidth +
	       nCurrentCharWidth - i + 1, 0,
               nMaxCharWidth, dimMinSize.height);

             Thread.sleep(delay);
           }
         }
        
         catch (StringIndexOutOfBoundsException e)
         {
           nCurrentChar = 0;

           rColor = (int)(255 * Math.random());
           gColor = (int)(255 * Math.random());
           bColor = (int)(255 * Math.random());
           g.setColor(
	     new Color(rColor, gColor, bColor));
         }
      }
      catch (InterruptedException e)
      {
	stop();
      }
    }
  }