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

看一下这段代码应该怎样改,最小的修改结构开线程播放声音
一个原来的类有播放声音函数如下:

Java code
    public static void PlaySound(int id)
    {
        。。。。。。
    }



由于声音时,会有短暂的停顿,想重新开一个线程,但是以前的调用方式不能改变。我这样做的


Java code
    class SD implements Runnable{
        int _id;
        SD(int id){
            _id = id;
        }
        public void run() {
            cGame.PlaySoundEx(_id);
        }
    }


    public static void PlaySoundEx(int id)
    {
        ......//这里是完全使用的原来函数的功能
    }

    
    //把原来的同名函数替换了,然后重新起一个线程完成原来声音函数的调用
    public static void PlaySound(int id)
    {
        new Thread ( new SD(1) ).start();
    }



但是编译时有如下错误,请帮忙指正。原来的static属性是不能去掉的。
non-static variable this cannot be referenced from
 a static context
  sd = new SD(1);

------解决方案--------------------
静态方法访问非静太类,当然会出借了。
你把你的内部类改成静态的就可以了。也就是把SD这个类改成静态的。


------解决方案--------------------
LZ呀,你还可以换一种思路考虑一下你的问题。首先:class装载时,首先装载的是静态类,在静态类的装载过程中,你试图去初始化一个非静态的类。JDK当然不认识它了。这回就出错了。
------解决方案--------------------
变为外部类或者把class SD变为 static class SD