错误:非静态变量,不能从静态上下文引用

时间:2012-11-27 21:38:17

标签: java static

我遇到此代码的问题:

package javaapplication16;
import java.io.InputStream;
import javax.swing.JOptionPane;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
public class JavaApplication16 {
    public static void main(String[] args) {
        NewJFrame n = new NewJFrame();
        n.setVisible(true);
        InputStream is;
        is = this.getClass().getClassLoader().getResourceAsStream("samp.wav");
        try {
            AudioStream audioStream;
            audioStream = new AudioStream(is);
            AudioPlayer.player.start(audioStream);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }
}

这是说

error: non-static variable this cannot be referenced from a static context
        is = this.getClass().getClassLoader().getResourceAsStream("samp.wav");

如果我将InputStream变量设为静态,那么它会告诉我非法的表达式开始。我还删除了this关键字。问题仍然是解决问题。怎么解决它?

3 个答案:

答案 0 :(得分:4)

只是避免这个问题,如下:

JavaApplication16.class.getClassLoader().getResourceAsStream("samp.wav");

答案 1 :(得分:1)

你不能在静态方法中使用this keyword。只能使用this关键字 在实例方法或构造函数中。 this是对当前对象的引用。

尝试:

    is = YourClassName.class.getClassLoader().getResourceAsStream("samp.wav");

答案 2 :(得分:1)

要完成此操作,请改为使用类文字:

    is = JavaApplication16.class.getClassLoader().getResourceAsStream("samp.wav");