是什么让这个背景变得静止怎么办?

时间:2011-04-25 22:40:49

标签: java static scope

我刚刚开始学习java,我遇到了静态/非静态问题。我的代码问题在actionlistener之内。当我尝试编译它时,它说:

  

无法从静态上下文引用非静态方法。

我是否认为执行的操作是静态的?如果是这样,我如何使用actionlistener来执行方法? (我很清楚,我可以将文本放入我的代码中,放入actionlistener。但如果我有不同的情况......)

 public class But extends JFrame{
    public void test(){
        //A method
        System.out.println("Testing");
    }
}

class TestListener implements ActionListener{
    public TestListener(){}
    public void actionPerformed(ActionEvent e) {
        But.test(); 
}}

3 个答案:

答案 0 :(得分:2)

test()中的{p> But是一种实例方法(非静态),但您尝试访问它,就像它是静态的一样。

尝试

class TestListener implements ActionListener{
    private But but = new But();
    public TestListener(){}
    public void actionPerformed(ActionEvent e) {
        but.test(); 
}}

或者如果您打算制作test(),请将其签名更改为

public static void test(){

答案 1 :(得分:1)

您的TestListener需要知道调用.test()方法的按钮。所以试试:

class TestListener implements ActionListener {
    private final But but;
    public TestListener(But b) {
        but = b; // save the instance of But that we want to call
    }
    public void actionPerformed(ActionEvent e) {
        but.test(); 
    }
}

这会更改TestListener构造函数以获取But的实例,并将其存储在but字段内部。然后,当执行操作时,可以调用.test()方法。

您需要适当修改对TestListener构造函数的调用。

答案 2 :(得分:0)

But.test(); 

您需要创建“But”类的实例。你在这里调用它的方式就好像它是一个静态(类)方法,而不是非静态(实例)方法。

也许只是一个错字。