1

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

3 回答 3

1

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

Key keyObject = new Key();

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

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

;)

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

private static class Key

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

于 2013-09-10T17:55:30.007 回答
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或者,如果您可以的话,在您的方法中将其设为局部变量。

于 2013-09-10T18:04:43.113 回答
0

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

因此,要修复,要么移动keyObject内部主要方法(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);
....
于 2013-09-10T17:57:16.013 回答