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

以下はフィールドであってはなりませんが、静的なメイン メソッドに配置されます。

Key keyObject = new Key();

Key クラスで Key フィールドを初期化すると、 で何が起こるかを見てくださいnew Key()

  • Key インスタンスが作成され、インスタンス化する必要があるフィールド Key があります
  • Key インスタンスが作成され、インスタンス化する必要があるフィールド Key があります
  • Key インスタンスが作成され、インスタンス化する必要があるフィールド Key があります
  • ...

;)

訂正: これが 2 つの入れ子になったクラスだとは思いませんでした。内部クラスを静的にします。

private static class Key

それ以外の場合、クラス Key は「ClickBot.this」を保持し、再帰が開始されます。

于 2013-09-10T17:55:30.007 に答える
0

もちろん、メインメソッドからのkeyObjectクラスメンバーとして使用しようとしています。したがって、 にいる間はインスタンスがありません。つまり、クラス メンバーを使用することはできません。ClickBotstaticmainClickBot

そのため、修正するには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 に答える
0

mainメソッドは静的であるため、非静的変数にアクセスすることはできません。オブジェクトが不要な場合は、次の操作を行いますstaticKey

ClickBot1)クラスのコンストラクターを作成する

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 に答える