2

Robot.keyPressを使用して"(二重引用符)を入力しようとすると、java.lang.IllegalArgumentException:無効なキーコードがスローされます。

どうすればこれを修正または回避できますか?

それが役に立ったら、私は現在Windowsを使用しています。

テストコード:

import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Test {
    public static void main(String[] args) throws Exception {
        Robot robot = new Robot();
        try {
            robot.keyPress(KeyEvent.VK_QUOTEDBL);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

例外:

java.lang.IllegalArgumentException: Invalid key code
    at sun.awt.windows.WRobotPeer.keyPress(Native Method)
    at java.awt.Robot.keyPress(Robot.java:358)
4

1 に答える 1

6

"キーボードにキー がないため、エラーが発生していると思います。"ほぼ確実にキーボードのキーの1つにありますが、おそらくシフトされます。「押す」のではなく"、そのキーの「Shift」と「base」文字を押す必要があります。つまり、そのキーを単独で入力した場合に得られる文字です。

"コマンドプロンプトで次のクラスを実行すると、文字が残っていることがわかりました。

import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Test {
    public static void main(String[] args) throws Exception {
        Robot robot = new Robot();
        try {
            robot.keyPress(KeyEvent.VK_SHIFT);
            robot.keyPress(KeyEvent.VK_2);
            robot.keyRelease(KeyEvent.VK_SHIFT);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

UKキーボード(私が使用している)では、"文字がシフト2されているため、を使用してKeyEvent.VK_2います。それは他のキーボードの他の場所にあるかもしれません-私が正しく覚えていれば、それは米国のキーボードでは一重引用符でシフトされています。その場合、VK_QUOTEの代わりにを使用しますVK_2

VK_SHIFTまた、Shiftキーがまだ押されていると考えているWindowsでのあらゆる種類の奇妙さを回避するには、キーを押すのを離す必要があることもわかりました。

于 2012-08-12T15:13:12.493 に答える