Java Eclipse 告诉我我的方法不是静态的

Java Eclipse Tells Me that My Method is not Static

我不知道我是否遗漏了一些非常基本的东西,但我有一个静态方法 returns 一个静态整数,我试图将其分配给另一个静态整数。我的代码是静态的,但我一直收到错误告诉我,"Cannot make a static reference to the non-static method getX() from the type KeyboardInput"(方法名称和 class 只是为了清楚)它告诉我解决方案是使方法静态的,但它已经是这样了,所以我完全迷路了。

代码如下:

Class 使用方法-

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Window extends JFrame{

    JPanel panel;
    ImageIcon imgIcon;
    JLabel label;

    private static int xLoc = KeyboardInput.getX(); // errors on this line
    private static int yLoc = KeyboardInput.getY(); // and errors on this line


    public Window(String name){
        super(name);

        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(null);

        //addKeyListener(new KeyboardInput());

        panel = new JPanel();       
        imgIcon = new ImageIcon("rorschach.jpg");
        label = new JLabel(imgIcon);
        label.setLocation(xLoc, yLoc);
        label.setSize(50,50);

        panel.add(label);
        add(panel);

        setVisible(true);

    }
}

Class 使方法-

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.Timer;

public class KeyboardInput implements KeyListener, ActionListener {

    private boolean goUp = false;
    private boolean goDown = false;
    private boolean goLeft = false;
    private boolean goRight = false;

    private static int x = 0;
    private static int y = 0;

    public static int getX(){
        return x;
    }

    public static int getY(){
        return y;
    }

    Timer timer;

    public KeyboardInput(){
         timer = new Timer(100, this);
    }

    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_W) {
            goUp = true;
        }
        if (e.getKeyCode() == KeyEvent.VK_S) {
            goDown = true;
        }
        if (e.getKeyCode() == KeyEvent.VK_A) {
            goLeft = true;
        }
        if (e.getKeyCode() == KeyEvent.VK_D) {
            goRight = true;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_W) {
            goUp = false;
        }
        if (e.getKeyCode() == KeyEvent.VK_S) {
            goDown = false;
        }
        if (e.getKeyCode() == KeyEvent.VK_A) {
            goLeft = false;
        }
        if (e.getKeyCode() == KeyEvent.VK_D) {
            goRight = false;
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (goUp) {
            y -= 5;
        }
        if (goDown) {
            y += 5;
        }
        if (goLeft) {
            x -= 5;
        }
        if (goRight) {
            x += 5;
        }
        if (goUp && goDown) {
            y += 5;
        }
        if (goLeft && goRight) {
            x += 5;
        }
    }

}

这个项目显然还没有完成,但我不认为我应该在这个时候得到这些错误,希望能解决这个问题。

提前致谢!

我想您不需要以下几行中的静态词:

private static int xLoc = KeyboardInput.getX(); // errors on this line

private static int yLoc = KeyboardInput.getY();

不是答案,但我无法在评论中格式化代码

这看起来是个极其糟糕的主意:

public class Window extends JFrame{

    ...
    private static int xLoc = ...;
    private static int yLoc = ...;

    public Window(String name) { ... }
    ...
}

您已经定义了一个构造函数,可以让您创建 Window 个实例。

Window 个实例有名称,而且它们扩展了 JFrame,这一事实看起来非常像邀请创建多个实例,但每个 Window 个实例共享相同的 xLocyLoc 每隔 Window 个实例。

这有什么意义?