java - 为什么需要静态修饰符以及如何修复它?

标签 java static modifier

我的 eclipse 告诉我,我需要使用静态修饰符,但是当我这样做时,洞的事情就会出错。这是我的代码,我希望你能帮助我并告诉我我搞砸了什么(我从 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);   
            }
        }
    }
}

最佳答案

下面一定不能是字段,而是放在main方法中,即静态的。

Key keyObject = new Key();

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

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

;)

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

private static class Key

否则类 Key 持有“ClickBot.this”,并且递归开始。

关于java - 为什么需要静态修饰符以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18725495/

相关文章:

java - java中如何通过转义字符进行分割?

c# - 静态变量在一段时间后重置为 null

java - 静态修饰符和静态 block 之间的区别

c# - 这些私有(private)静态成员线程安全吗?

java - IntelliJ - 如何让它警告我有关静态成员的隐式访问?

shell - 用于检查修改键是否被按下的 Ubuntu shell 实用程序

java - 包修饰符有什么意义?

java - 支持包的用途是什么(例如它与 util 有何不同)?

java - struts 2 标签不会生成标签

java - IllegalMonitorStateException - CyclicBarrier