我这里有一个班级,意思是当按下一个键时在一个窗口中移动一把枪。但是,我从类型中引用非静态方法时收到错误。这是两部分。错误来自两个“if(k == .....”行。
private class Keyboard extends KeyAdapter {
public void keyPressed (KeyEvent e) {
int k = e.getKeyCode();
if (k == 39) {Gun.move(10);}
if (k == 37) {Gun.move(-10);}
}
}
public class Gun {
private Color color;
private int A,B,C,D;
private int E,F,G,H;
public Gun (Color c) {
color = c;
A = 375;
B = 550;
C = 50;
D = 10;
E = 395;
F = 540;
G = 10;
H = 10;
}
public void move(int xAmount){
A = A + xAmount;
E = E + xAmount;
}
}
答案 0 :(得分:4)
哪个Gun
?您需要实例,即对由此创建的Gun
对象的引用:
Gun gun = new Gun(...);
gun.move(amount);
您的Keyboard
对象必须以某种方式引用此Gun
对象,或者某个管理器类型的对象,它知道您正在尝试移动Gun
。
答案 1 :(得分:0)
移动方法是非静态方法,因此应使用类Gun的实例调用它。
Gun gun = new Gun();//creating an instance of a Gun class.
if (k == 39) {gun.move(10);}
if (k == 37) {gun.move(-10);}
答案 2 :(得分:0)
静态方法不是特定于对象的给定实例的方法。它不能使任何一支枪与另一支枪不同(实例变量)。你的移动方法不是静态的。它移动了一把枪。
当你把它称为:
Gun.move(10)
你在所有枪上调用它,而不是在某个枪上(因此关于静态方法的错误)。为了移动枪,你必须有一把你想要移动的枪。因此,您需要创建一个新枪(使用new Gun(...)
)。