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

分虽然不多,但就这些了,希望大家共同进步
遇到了这样一个情况
public   class   Eatsnake
{
Snake   snake;
control   con;
....
public   Eatsnake()
    {  
            snake=new   Snake(this,30,30);
          Thread   th=new   Thread(snake);
          con=new   control(snake);
          th.start();
      }
}
在control类的构造函数中要从E盘读取一个文件显示在该面板上,如果我像上面的那样写就可以正常读取显示,但我改成下面这两种写法就不能读取并显示了,为什么呢?两几种写法有什么区别么?
public   class   Eatsnake
{
Snake   snake;
control   con;
....
public   Eatsnake()
    {  
            snake=new   Snake(this,30,30);
          Thread     th=new   Thread(snake);
          con=new   control(snake);
          begin();
      }
public   void   begin()
    {
        th.start();
      }
}
或是这样也不能读取
public   class   Eatsnake
{
Snake   snake=null;
control   con;
....
public   Eatsnake()
    {  
          con=new   control(snake);
          begin();
      }
public   void   begin()
    {
      snake=new   Snake(this,30,30);
      Thread   th=new   Thread(snake);
        th.start();
      }
}


如果大家愿意看就看一下我写的恶心的代码,写的很恶心,是一个贪食蛇的小游戏

------解决方案--------------------
第一段:th是局部变量,不能在begin()中访问,需要把Thread th=new Thread(snake);放到成员变量里
第二段:con=new control(snake);此时snake是null。con=new control(snake);begin();两句互换一下位置即可