我的日食告诉我,我需要使用一个静态修饰符,但是当我这样做时,这个洞就会出错。这是我的代码我希望你可以帮助我并告诉我我搞砸了什么(我从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);
}
}
}
}
答案 0 :(得分:1)
以下内容不能是字段,而是放在main方法中,即静态。
Key keyObject = new Key();
在Key类中初始化Key字段后,查看new Key()
上会发生什么:
<强>)强>
的校正:强> 的 我没有看到这是两个嵌套类。使内部类静态。
private static class Key
否则类Key持有`ClickBot.this',递归开始。
答案 1 :(得分:0)
您正在尝试使用keyObject
作为主要方法ClickBot
的类成员,当然这是static
。因此,当您在main
时,您没有ClickBot
实例,这意味着您无法使用类成员。
因此,要修复,请移动主方法(1)中的keyObject
,或使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);
....
答案 2 :(得分: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
方法感兴趣,请将其设为局部变量。