isAlive problem..Help了解它是如何工作的

时间:2011-01-12 09:13:38

标签: java

我收到此错误:

"non-static method isAlive() cannot be referenced from a static context"

这段代码有什么问题。请。

我想检测线程是否还活着...... 任何代码方面的帮助都将受到高度赞赏。谢谢 最大

class RecThread extends Thread {

    public void run() {

        recFile = new File("recorded_track.wav");
        // Output file type
        AudioFileFormat.Type fileType = null;
        fileType = AudioFileFormat.Type.WAVE;

        // if rcOn =1 thread is alive 
        int rcOn;

        try {
            // starts recording
            targetDataLine.open(audioFormat);


            targetDataLine.start();


            AudioSystem.write(new AudioInputStream(targetDataLine),
fileType, recFile);

            if (RecThread.isAlive() == true) {
            rcOn =1;
        }
        else {
        rcOn =0;
    }



        } catch (Exception e) {
            showException(e);
        }

        // update actions

        recAction.setEnabled(true);
        stopRecAction.setEnabled(false);

    }
}

3 个答案:

答案 0 :(得分:2)

if (RecThread.isAlive() == true) {

这条线存在问题。 isAlive()不是静态方法,这意味着它只能作用于Thread的实例。您通过使用类型(RecThread)而不是对象调用静态上下文来使用它。

答案 1 :(得分:0)

您尝试以静态方式访问非静态方法。我的意思是,如果运行当前实例的线程没有死,则isAlive()方法返回。

这就是为什么isAlive()不是静态的,它是一个实例(对于线程的状态)而不是类本身。

答案 2 :(得分:0)

从run()中检查isAlive()没有意义..如果它在run()中执行代码,则意味着它是活的 如果某个其他线程有一个RecThread对象,那么该线程可以使用recThread.isAlive()来查看它是否仍在运行