程序是实现Applet program在窗口中医红色,蓝色,绿色循环显示。我是在eclipse 下运行的。为什么以下的
 for(int i=0;;)换成for(int i=0;i<20;i++)就达不到效果了呢?太奇怪了,无法理解
import java.awt.Color;import java.awt.Graphics;import javax.swing.JApplet;
public class App extends JApplet
  
{
  public void paint(Graphics g)
   
 {
      g.setColor(Color.red);
      for(int i=0;;)
      {
        g.drawString("Hello applet!",50,60);
        if(g.getColor()==Color.red)
         g.setColor(Color.blue);
        g.drawString("Hello applet!",50,60);
        if(g.getColor()==Color.blue)
          g.setColor(Color.green);
        g.drawString("Hello applet!",50,60);
        if(g.getColor()==Color.green)
            g.setColor(Color.red);
        g.drawString("Hello applet!",50,60);
        
       } 
 }
}

解决方案 »

  1.   

    for(int i=0;;)是一个死循环,能看到颜色变化纯粹是无规律的。
    for(int i=0;i<20;i++)执行20次,依照当前机器普遍的速度,来不及眨眼就完成了。
      

  2.   

    那要是用Timer怎么 实现呢
      

  3.   

    反正要用多线程,不一定用Timer了。看代码import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JApplet;public class App extends JApplet {
    private Color color = Color.red;
    JApplet applet = this; @Override
    public void init() {
    applet=this;
    new Thread() {
    @Override
    public void run() {
    for (int i = 0; i < 20; i++) {
    try {
    Thread.sleep(1000);
    if (color.equals(Color.red))
    color = Color.blue;
    else if (color.equals(Color.blue))
    color = Color.green;
    else if (color.equals(Color.green))
    color = Color.red;
    applet.repaint();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }.start();
    }
    public void paint(Graphics g){
    g.setColor(color);
    g.drawString("Hello applet!" , 50, 60);
    }
    }