繁体   English   中英

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

[英]Why do i require a static modifier and how do i fix it?

我的日食告诉我,我需要使用静态修饰符,但是当我这样做时,孔洞问题就变成了错误。 这是我的代码,希望您能帮帮我,告诉我我搞砸了(我从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”,然后递归开始。

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

因此,要解决此问题,可以将keyObject移动到main方法内部(1),或者将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);
....

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

1)为您的ClickBot类构造一个构造函数

2)在其中初始化keyObject

2)在您的main方法中,创建一个ClickBot实例

3)在您的ClickBot类中ClickBot一个新方法( public void methodName()

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

5)在您的main方法中调用clickBotObject.methodName()

否则,如果您的Key对象上的static对象没问题,那么只需在其上添加static对象即可。

或者,也可以在您的main方法中将其设置为局部变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM