[英]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()
会发生什么:
;)
更正:我没有看到这是两个嵌套的类。 使内部类静态。
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.