日期:2014-05-20  浏览次数:20688 次

|谁能告诉我|为什么要用线程!
我对这段代码很是不解 谁能抽点时间给我解释一下啊 不胜感激!

代码1:
class MainCanvas extends Canvas implements Runnable
{
  public MainCanvas()
  {
  Thread t = new Thread(this);
  t.start();
  }

  public void paint(Graphics g)
  {
  ......//绘制

  }

  public void run()
  {
  while(true)
  {
  ......//一些坐标的处理
  repaint();
  }
  }
}


疑惑:1,MainCanvas类 可否不实现那个Runnable接口?

2.为什么不能改变成下面这样子.
  我在构造方法MainCanvas()中
  调用rep() 和 上面那代码中 用t.start()启动线程 有什么区别啊.

代码2:
class MainCanvas extends Canvas 
{
  public MainCanvas()
  {
  rep();
  }

  public void paint(Graphics g)
  {
  ......//绘制

  }

  public void rep()
  {
  while(true)
  {
  ......//一些坐标的处理
  repaint();
  }
  }
}

 

------解决方案--------------------
1,如果你没有实现Runnable接口,就不能做为线程的Target.这是语言上规定的
2,如果你不起动一个线程做while(true)的事情,那么,你的构造函数永远返回不了,也就是说你的程序就死在那里了
你在构造MainCanvas的时候,构造函数一运行到rep方法,就运行不下去了.因为它是一个死循环,而起一个线程 
去作死循环就不要紧.因为它是另外的一个线程