A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡宝林 中级黑马   /  2012-6-4 09:36  /  1237 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hy19985125 于 2012-6-4 10:56 编辑

public class C{
    public final String a;
    public final String b;
   
    public C(String a, String b){
        this.a = a;
        this.b = b;
      
    }
    public void play(){
        System.out.println("a="+a);
    }
    public void sleep(){
        System.out.println("b="+b);
    }
    public void d(){
        new Thread(){
            public void run(){
                while(true){
                    play();
                   sleep();
                }
            }
        }.start();
    }
   
    public static void main(String[] args){
        new C("a", "b").d();
    }
}
编译报错,不知道错在哪里,程序本该开启一个死循环线程,不断的执行play();sleep();
但是编译报错,求解!!!!

2 个回复

倒序浏览
本帖最后由 丰亚彬 于 2012-6-4 10:20 编辑

你的匿名内部类那里错了,你写的那个sleep方法应该是Thread类里面的,不是你要指定的,要显示指定一下访问方法所在位置,我把代码给你
  1. public class C{
  2.     public final String a;
  3.     public final String b;
  4.    
  5.     public C(String a, String b){
  6.         this.a = a;
  7.         this.b = b;
  8.       
  9.     }
  10.     public void play(){
  11.         System.out.println("a="+a);
  12.     }
  13.     public void sleep(){
  14.         System.out.println("b="+b);
  15.     }
  16.     public void d(){
  17.         new Thread(){
  18.             public void run(){
  19.                 while(true){
  20.                     C.this.play();
  21.                                         C.this.sleep();
  22.                 }
  23.             }
  24.         }.start();
  25.     }
  26.    
  27.     public static void main(String[] args){
  28.         new C("a", "b").d();
  29.     }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
因为你的sleep方法是线程Thread的内部方法,而你却用了;
所以当你在sleep中加入一个数字时会报异常,这就说明了。java把sleep当成了Thread.sleep();
而不是你的sleep;因为在Thread。sleep();中没有空参数的方法;所以会报错;
你可以怎么写 C.this.sleep();就哦了。我试过了,没问题;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马