我刚刚开始学习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();
}}
答案 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”类的实例。你在这里调用它的方式就好像它是一个静态(类)方法,而不是非静态(实例)方法。
也许只是一个错字。