你的这两句代码创建了一个线程并让它执行:
Thread t=new Thread(mp);
t.start();
当调用start()方法后,就会去执行对应线程类里的run()方法,这时候,run()方法和t.start()后面的语句一起执行。不过你的 MyPanel 虽然实现了Runnable接口,也可以开一个线程,但从你的代码上看,你没有用MyPanel 的对象对调用start()方法啊,你只调用了MyPanel的show()方法,这时那个线程根本不起作用。

解决方案 »

  1.   

    t.start();后面的语句指的是什么??
      

  2.   

    Frame 的show()方法不是已经过时了吗,就是让你创建的那个窗体显示出来,awt的核心就是你那个paint()方法,w.show()不是说调用了paint()方法,paint()方法归AWT的线程所控制,当你在你的那个线程里面调用repatin()方法时,Awt的那个线程会调用一次paint()方法。在Swing中JFrame可以使用w.setVisible(true)来显示窗体。
      

  3.   

    t.start();后面的语句指的是什么??
    t.start();还是在主线程中运行的语句,t.start()这句的意思是启动t线程,当启动好了之后主线程继续沿t.start()后面执行
      

  4.   

    给你注释以下代码:import java.awt.*;
    public class MyBall{
    public static void main(String args[]){/**
    这些代码是图形界面管理的。就不分析了。不是这个程序突出的重点。
    */
    Frame w=new Frame();
    w.setSize(300,400);
    MyPanel mp=new MyPanel();
    w.add(mp);
    Thread t=new Thread(mp);
    t.start();
    w.show();
    }
    }
    /**
    以下代码是线程的创建线程有两种方式:第一种是继承Thread类。
    第二种方式是:实现Runnable接口
    重点给你讲第二种方式 的步骤吧:
    1.创建一个类实现Runnable接口
    2.实现run()方法。
    3.创建实现Runnable接口的类的对象,
    4.用实现Runnable接口的类的对象调用strat()方法
    */
    class MyPanel extends Panel implements Runnable{
    int x=30;
    int y=30;
    public void paint(Graphics g)
    {  
    g.setColor(Color.white);
    g.fillOval(x,y-1,50,50);
    g.setColor(Color.black);
    g.fillOval(x,y,50,50);}
    public void run()//复写了run方法
    {
    while(true){
    y++;
    if(y>400){  //while循环,y在400以内一直y++
    y=0;
    }
    //异常处理
    try{ 
    Thread.sleep(30);//线程停止30秒后在运行
    }catch(Exception e){}
    repaint();
    }
    }
    }通俗点讲,线程跑起来得益于start方法,start方法的作用是开启线程,调用run方法。至于其他的你就别想了,什么线程控制两个代码呀,这些都是你考虑的太多了然后把自己给绕进去了。这个小程序的目的是想让你了解线程的使用。你就当他就是一个线程,通过变量y的变化控制着窗体变化。
      

  5.   

    t.start();后面的语句指的是什么??
    t.start();还是在主线程中运行的语句,t.start()这句的意思是启动t线程,当启动好了之后主线程继续沿t.start()后面执行
    意思是不是说在出现t.start();方法后,一方面程序继续向下执行,另一方面就要开始执行run(),当后面跟的程序执行完了之后是不是就剩下run()里面的方法在循环了?