9

:Java Robot を使用して入力したい。しかし、私はIllegalArgumentException. 私のコードは次のとおりです。

robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_SHIFT);

例外は次のとおりです。

java.lang.IllegalArgumentException: Invalid key code.].

私も試しました:

robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);

どうすればこの問題を解決できますか?

4

8 に答える 8

17

このコードで試してください:

robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);

キーボードと同様に、Shift + ; を押したときに : を入力します。シミュレートする必要があるのと同じです。

上記の答えでうまくいくかを試すために、このコードを実行してみてください:

public class Test {
    public static void main(String[] args) {
        Robot robot;
        try {
            robot = new Robot();
            robot.keyPress(KeyEvent.VK_SHIFT);  
            robot.keyPress(KeyEvent.VK_SEMICOLON);  
            robot.keyRelease(KeyEvent.VK_SEMICOLON);  
            robot.keyRelease(KeyEvent.VK_SHIFT);
        } catch (AWTException e) {
            // TODO Auto-generated catch bloc
            e.printStackTrace();
        }


    }
}
于 2011-04-20T20:23:31.720 に答える
4

残念ながら、JavaRobotクラスは、 と呼ばれる文書化されていないインターフェースのプラットフォーム固有の実装に依存していますjava.awt.peer.RobotPeer。プラットフォーム固有の実装によって、どのキー プレス イベントが合法か違法かが決まります。

私の Windows XP ボックスでは、これで問題なく動作します。

public static void main(final String[] args) throws InterruptedException, IOException {
    Robot robot;
    try {
        robot = new Robot();
        robot.keyPress(KeyEvent.VK_SHIFT);
        robot.keyPress(KeyEvent.VK_SEMICOLON);
        robot.keyRelease(KeyEvent.VK_SEMICOLON);
        robot.keyRelease(KeyEvent.VK_SHIFT);
    } catch (final AWTException e) {
        // TODO Auto-generated catch bloc
        e.printStackTrace();
    }
}

別のプラットフォームで次のことを試してみてください。

public static void main(final String[] args) throws InterruptedException, IOException {
    Robot robot;
    try {
        robot = new Robot();
        robot.keyPress(KeyEvent.VK_COLON);
        robot.keyRelease(KeyEvent.VK_COLON);
    } catch (final AWTException e) {
        // TODO Auto-generated catch bloc
        e.printStackTrace();
    }
}
于 2011-04-20T21:18:36.400 に答える
3

このコードを試してみてください ;)、おそらく役に立ちます (ASCII コード alt+5+8=:) を使用:

robot9.delay(20);
robot9.keyPress(KeyEvent.VK_ALT);
robot9.delay(20);
robot9.keyPress(KeyEvent.VK_NUMPAD5);
robot9.keyRelease(KeyEvent.VK_NUMPAD5);
robot9.delay(20);
robot9.keyPress(KeyEvent.VK_NUMPAD8);
robot9.keyRelease(KeyEvent.VK_NUMPAD8);
robot9.delay(20);
robot9.keyRelease(KeyEvent.VK_ALT);
robot9.delay(20);
于 2014-06-16T13:29:24.713 に答える
2

これも言語依存のようです。ドイツ語キーボードでは、 と の組み合わせを使用するVK_SHIFTと機能し VK_PERIODました。

于 2015-06-22T14:05:15.873 に答える
1

誰かが KeyboardKeys クラスを作成し、SO でここに公開しました。https://stackoverflow.com/a/20979488/7069565にあります。簡単に言えば、彼はすべての文字を Alt + Number の組み合わせとして入力します。

于 2016-10-28T01:16:06.687 に答える
0

Java Robots についてはわかりませんが、shift を使用している場合は、セミコロンを入力しないでください。shift + セミコロン = コロンだからです。コロンはキーではなく、セミコロンはキーであるため、おそらく不正な引数です。

于 2011-04-20T20:22:30.300 に答える
0

このコードを試す


        case KeyEvent.VK_SEMICOLON:
            if((event.getModifiers() & KeyEvent.KEY_PRESSED)!=0)
               System.out.println(":");
            else
                System.out.print(";");
            break;
于 2014-03-07T12:38:25.560 に答える