为什么我需要静态修改器,我该如何解决?

时间:2013-09-10 17:39:00

标签: java static modifier

我的日食告诉我,我需要使用一个静态修饰符,但是当我这样做时,这个洞就会出错。这是我的代码我希望你可以帮助我并告诉我我搞砸了什么(我从StealthyHunter7获得内部类的提示):

public class ClickBot 
{

private class Key
    implements KeyListener
    {
        private boolean spacebarPressed = false;

        @Override
        public void keyTyped(KeyEvent e)
        {
        }

        @Override
        public void keyPressed(KeyEvent e)
        {
            if(e.getKeyCode() == KeyEvent.VK_SPACE)
            {
                spacebarPressed = true;
            }
        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            if(e.getKeyCode() == KeyEvent.VK_SPACE)
            {
                spacebarPressed = false;
            }
        }

        public boolean isSpacebarPressed()
        {
            return spacebarPressed;
        }    
    }

    Key keyObject = new Key();

    public static void main(String[] args) throws IOException, AWTException
    {       
        JFrame.addKeyListener(keyObject);
        final Robot robot = new Robot();
        robot.delay(2000);

        while(keyObject.spacebarPressed())
        {
        {
                robot.mousePress(InputEvent.BUTTON1_MASK);
                robot.mouseRelease(InputEvent.BUTTON1_MASK);

                robot.delay(30);   
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

以下内容不能是字段,而是放在main方法中,即静态。

Key keyObject = new Key();

在Key类中初始化Key字段后,查看new Key()上会发生什么:

  • 创建了一个Key实例,它有一个必须实例化的字段Key
  • 创建了一个Key实例,它有一个必须实例化的字段Key
  • 创建了一个Key实例,它有一个必须实例化的字段Key
  • ...

<强>)

校正: 的 我没有看到这是两个嵌套类。使内部类静态。

private static class Key

否则类Key持有`ClickBot.this',递归开始。

答案 1 :(得分:0)

您正在尝试使用keyObject作为主要方法ClickBot的类成员,当然这是static。因此,当您在main时,您没有ClickBot实例,这意味着您无法使用类成员。

因此,要修复,请移动主方法(1)中的keyObject,或使keyObject静态(2)。

以下是如何做(1):

public static void main(String[] args) throws IOException, AWTException
{       
    // Move it to here:
    Key keyObject = new Key();

    JFrame.addKeyListener(keyObject);
    final Robot robot = new Robot();
    robot.delay(2000);

    while(keyObject.spacebarPressed())
    {
....

这是(2):

// Make it static:
static Key keyObject = new Key();

public static void main(String[] args) throws IOException, AWTException
{       
    JFrame.addKeyListener(keyObject);
    final Robot robot = new Robot();
    robot.delay(2000);
....

答案 2 :(得分:0)

您的main方法是静态的,因此您无法访问非静态变量。如果您不想在static对象上Key,请执行以下操作:

1)为ClickBot

创建一个构造函数

2)初始化其中的keyObject

2)在main方法中创建ClickBot

的实例

3)在ClickBot班级(public void methodName()

中制作新方法

4)将所有进一步的代码放入其中

5)在clickBotObject.methodName()方法中致电main

否则,如果static对象上的Key对您有好处,那么只需在其上添加static即可。

或者,如果您对main方法感兴趣,请将其设为局部变量。