package applet;
import java.applet.Applet;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Applet1 extends Applet implements Runnable,ActionListener
{
        Thread runner;
        Image h;
        Button g;
        int y;
        int ;//标记paint()函数执行了几次
 
        public void init()
        {
                h=getImage(getDocumentBase(),"1.jpg");
                g=new Button();
                g.addActionListener(this);
                add(g);
        }
        public void paint(Graphics g)
        {
                g.drawImage(h,y,100,this);
                ++;
        }
       public void run()
       {
             for(y=1;y<=200;y++)
             {
               repaint();
               try
               {
                      Thread.sleep(100);
               }catch(Exception ee){}
                    repaint();
               }
        }
        public void actionPerformed(ActionEvent e)
        {
            runner = new Thread(this);
            runner.start(); 
        }
}
改动一下就可以了..希望能给我加130分  呵呵..
看一下例子就明白了.

解决方案 »

  1.   

    老大,用线程的方法小第已经知道了,我希望你能告诉我,为什麽调用了两百次repaint(),却只调用了2次paint(),如能解决,130分数定准时送到
      

  2.   

    这是你的public boolean action(Event e,Object o)方法有问题!
    如果把repaint()放在paint()里面是会的,但是你的action方法 是没有事件触发它的,所以repaint()无法调用。你的开头就没有让这个applet进行事件监听,怎么会没有问题呢,除非你把这些事件去掉,保证你的repaint()一定被调用才可以。
    而且你的  Thread.sleep(100);表示的线程问题可能也有问题你这样试试看,这只是模拟解释你的问题。
    要写线程的话,还是 DESL这样的做import java.applet.Applet;
    import java.awt.*;
    public class asd extends Applet implements Runnable
    {
            Image h;
            Button g;
            int y;
            int ;//标记paint()函数执行了几次
            Thread paintA=null;
            public void init()
            {
                    h=getImage(getDocumentBase(),"1.jpg");
                    g=new Button();
                    add(g);
            }
            public void paint(Graphics g)
            {
                    g.drawImage(h,y,100,this);
                    ++;
            }        public void start(){
               if(paintA == null){
                  paintA = new Thread(this);
                  paintA.start();           }
             }         public void stop()
             {
                paintA = null;
             }         public void run()
             {
                while (paintA != null)
                {
                  for(y=0;y<200;++y)
                  {
                    try {
                      paintA.sleep(100);
                    }
                    catch (InterruptedException e) {}
                    repaint();
                    showStatus(String.valueOf());
                  }
                   paintA.stop();
                 }
             }
      

  3.   

    我用的是java,不是java2,action()函数没有问题,在java里面是不用事件监听的,
      

  4.   

    那你试试我给你的这个是不是可以运行200次的,没错吧!你自己的就是没有执行你的action里的repaint()方法。
    你可以在jbuilder里面好好的调试一下。
      

  5.   

    我不管你的action里的参数event什么意思!你的程序执行完了init和paint后怎么跑到Action里面去,什么情况下会去?
      

  6.   

    用鼠标点击按钮,即会调用action()函数,如果不信,就请把代码敲进自己的机器里,试一试吧,结果绝对如我所说,我用的是javaJDK1.42,
      

  7.   

    你的代码我调试过的。
    这还不是  不用事件监听的?
    这个问题现在答案不是出来了吗? 除非你的事件被触发了 才会调用repaint(),这样你的程序是没错的,不过 你的event参数 和object参数可以改改,用event的子类制定特定的监听,然后将Runnable接口实现,你想用一个线程还是多个线程不就是随便你搞了!怎么 还想不通?