0

我在这里有一门课,目的是在按下键时在窗口中移动枪。但是,我收到关于从类型中引用非静态方法的错误。这是两个部分。错误出现在两个“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;

        }

    }
4

3 回答 3

4

哪个Gun?您需要一个实例,即对Gun由此创建的对象的引用:

Gun gun = new Gun(...);
gun.move(amount);

您的Keyboard对象必须以某种方式引用该Gun对象,或者可能是某个知道您正在尝试移动Gun.

于 2012-12-03T23:45:42.663 回答
0

您的move 方法是一个非静态方法,因此应该使用 Gun 类的实例调用它。

    Gun gun = new Gun();//creating an instance of a Gun class.            
    if (k == 39) {gun.move(10);}
    if (k == 37) {gun.move(-10);}
于 2012-12-03T23:46:03.333 回答
0

静态方法是不特定于给定对象实例的方法。它不适用于任何使一把枪与另一把枪不同的东西(实例变量)。您的移动方法不是静态的。它移动特定的枪。

当您将其称为:

Gun.move(10)

您是在所有枪支上调用它,而不是在特定枪支上调用它(因此出现关于静态方法的错误)。为了移动一把枪,你必须有一把你想移动的枪。因此,您需要创建一把新枪(使用new Gun(...))。

于 2012-12-03T23:51:07.567 回答