由于MyRunner是Myclass类的内部类(且不是静态的),如果你不构造一个Myclass类则不存在这个内部类存在的环境,故此你么写成new Myclass().new MyRunner()。而后面的return new MyRunner();他有一个缺省的Myclass类的实例句柄(就是this)。要么你吧内部类定义为静态的你可以这样在main里构造:(new Thread(new Myclass.MyRunner())).start();

解决方案 »

  1.   

    我还没有仔细考虑过这个问题,但是我的理解是这样,因为
    public static void main(String[] args)是静态方法,就是说该方法只属于某个类,而不属于具体的某个对象。
    如果你在main()方法中直接调用getRunner()也不可以,因为在没有构造对象之前不能访问其中的任何方法,对于内部类也是一样,你没有构造外部类就不能访问内部类。
    例如如果将
    public MyRunner getRunner(){
            return new MyRunner();
        }
    更改成为
    public static MyRunner getRunner(){
            return new MyRunner();
        }
    则也必定会报错,关键是理解静态方法只属于类,而不属于某个特定的实例,这应该是该问题的关键所在,不知道说的对否。
      

  2.   

    多谢两位指教,我明白了,对于static和非static方法有了更进一步
    的了解。
      

  3.   

    fastmask(我心烦)老兄讲的很对,我表示认同。