Java 为什么我需要一个静态修改器以及如何修复它?

Java 为什么我需要一个静态修改器以及如何修复它?,java,static,modifier,Java,Static,Modifier,我的eclipse告诉我,我需要使用静态修改器,但当我这样做时,洞的事情就错了。这是我的代码,我希望您能帮助我,告诉我我把事情搞砸了(我从StealthyHunter7得到了关于内部类的提示): 以下内容不能是字段,而是放在main方法中,即静态方法 Key keyObject = new Key(); 在密钥类中初始化密钥字段后,看看在new Key()上会发生什么情况。: 创建密钥实例时,它具有必须实例化的字段密钥 创建密钥实例时,它具有必须实例化的字段密钥 创建密钥实例时,它具有必须实

我的eclipse告诉我,我需要使用静态修改器,但当我这样做时,洞的事情就错了。这是我的代码,我希望您能帮助我,告诉我我把事情搞砸了(我从StealthyHunter7得到了关于内部类的提示):


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

Key keyObject = new Key();
在密钥类中初始化密钥字段后,看看在
new Key()上会发生什么情况。

  • 创建密钥实例时,它具有必须实例化的字段密钥
  • 创建密钥实例时,它具有必须实例化的字段密钥
  • 创建密钥实例时,它具有必须实例化的字段密钥
;)

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

private static class Key

否则,类键会保存一个“ClickBot.this”,然后递归开始。

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

Key keyObject = new Key();
在密钥类中初始化密钥字段后,看看在
new Key()上会发生什么情况。

  • 创建密钥实例时,它具有必须实例化的字段密钥
  • 创建密钥实例时,它具有必须实例化的字段密钥
  • 创建密钥实例时,它具有必须实例化的字段密钥
;)

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

private static class Key

否则,类键持有一个“ClickBot.this”,递归开始。

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

因此,要修复此问题,请将
keyObject
移动到main方法(1)内,或将
keyObject
设置为静态(2)

下面是如何做(1):

以下是第(2)条:


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

因此,要修复此问题,请将
keyObject
移动到main方法(1)内,或将
keyObject
设置为静态(2)

下面是如何做(1):

以下是第(2)条:


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

1) 为您的
ClickBot
类创建构造函数

2) 初始化其中的keyObject

2) 在
main
方法中创建
ClickBot

3) 在
ClickBot
类中创建一个新方法(
public void methodName()

4) 把你所有的代码都放进去

5) 调用
单击
主方法中的botobject.methodName()

否则,如果
Key
对象上的
static
没有问题,只需在其上添加
static


或者,如果可以的话,将其作为
main
方法中的局部变量。

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

1) 为您的
ClickBot
类创建构造函数

2) 初始化其中的keyObject

2) 在
main
方法中创建
ClickBot

3) 在
ClickBot
类中创建一个新方法(
public void methodName()

4) 把你所有的代码都放进去

5) 调用
单击
主方法中的botobject.methodName()

否则,如果
Key
对象上的
static
没有问题,只需在其上添加
static


或者,如果您同意的话,在
main
方法中将其设置为局部变量。

我将其移动到main方法,但它仍然表示它不能“对非静态方法add key listener进行静态引用:(对此我能做些什么?哦,你也在用JFrame做同样的事情。首先创建一个JFrame实例:
JFrame frame=new JFrame();frame.addKeyListener(…);
我把它移到了main方法,但它仍然说它不能“对非静态方法进行静态引用AddKey listener:(对此我能做些什么?哦,你也在用JFrame做同样的事情。首先创建一个JFrame实例:
JFrame frame=new JFrame();frame.addKeyListener(…);
// 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);
....