注:  listing 5 以下的代码无用
贴错了

解决方案 »

  1.   

    for( ; ; ) 是无限循环,线程休息250毫秒后对msg长度进行判断,并且自加1,相应的位置也会变化,如果到头进行一个break,也就是回滚
    依次类推,最终实现滚动~
    我的理解是这样的
      

  2.   

    其实程序一直是在坐标的(50,30)处开始显示此字符串.   
          g.drawString(msg, 50, 30);  //开始坐标没有改变
      
       字符串为:  " A Simple Moving Banner."
        ch = msg.charAt(0);    // 获取字符串的第一个字符    msg = msg.substring(1, msg.length()); //从第二个字符开始截取子串,并赋给msg    msg += ch; // 将开始获取的第一个字符连接到上一步截取子串的末尾.
        
        在线程休息250毫秒后,调用repaint(); 在(50,30)处显示新的字符串!!    A Simple Moving Banner.
         Simple Moving Banner.A
        Simple Moving Banner.A
        imple Moving Banner.A S
        mple Moving Banner.A Si
        ple Moving Banner.A Sim
        le Moving Banner.A Simp
        e Moving Banner.A Simpl
         Moving Banner.A Simple
        Moving Banner.A Simple 
        .......................    请注意空格.
      

  3.   

    还是不理解 
    线成休息250ms后 字符串还是
        A Simple Moving Banner.
    截取之后 还是 
        A Simple Moving Banner.
    位置还是没有改变啊 
    如何出现的错位呢
      

  4.   

    char ch;     // Display banner 
        for( ; ; ) {
          try {
            repaint();//刷新打印字符串
            Thread.sleep(250);
            ch = msg.charAt(0);把字符串msg中的第一个字符付给ch
            msg = msg.substring(1, msg.length());//把msg中的第一个字符去掉
            msg += ch;//再把去掉的字符加到串尾
            //执行repaint()在屏幕打印字符串msg,依次循环,字符总是由第一位移到串尾,然后打印一次,看起来就动画了。
            if(stopFlag)
              break;
          } catch(InterruptedException e) {}
        }
      

  5.   

    你运行了这个程序吧???
        绝对变了,你可以先写个程序验证一下是否截取了字符串。 public class TestStr
    {
    public static void main(String[] args)
    {
    char ch;
    String msg = "A Simple Moving Banner.";

    for (;;)
    {
                 ch = msg.charAt(0);
                          msg = msg.substring(1, msg.length());
                          msg += ch;
            
                          System.out.println(msg);
    }
    }
    }   你自己看一下运行结果便清楚了,在线等你。
      

  6.   

    这是一个死循环,你可以在运行以后按Ctrl+C,终止程序的运行看结果。