1

ユーザーのキーボード入力を取得しようとしていますが、コンソールを使用しないと機能しないようです。

私が達成しようとしているのは、コンソールに入力することなく、キーボードから 12345 を入力するユーザーをキャプチャするプログラムを用意することです。そして、キャプチャされた整数を返します。

public class InputWithoutConsoleTest {

public static void main(String[] args) {
    System.out.println(scanNumber());;
}

private static int scanNumber() {
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        return Integer.parseInt(br.readLine());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 0;
}
}

編集: 入力ソースはバーコード スキャナーです。バーコードをスキャンし、1234567890{enter} の形式でプログラムに送信します。この入力をJavaでキャプチャするにはどうすればよいですか?

4

3 に答える 3

5

Jnativehookは、グローバルなキーボード (およびマウス) 入力を提供する優れたライブラリです (少なくとも、これは「コンソールに入力する必要がない」という意味だと思います)。動作するために GUI などは必要ないため、アプリケーションがキーボード入力を取得するのを妨げる可能性のあるキーボード フォーカスやその他のものとは無関係です。jnativehook を使用すると、次のように、システムでキーが押されたときに通知されるグローバル キー リスナーを簡単に登録できます (プロジェクトの wiki の例に基づく)。

public class GlobalKeyListenerExample implements NativeKeyListener {
    public void nativeKeyPressed(NativeKeyEvent e) {
            System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyReleased(NativeKeyEvent e) {
            System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyTyped(NativeKeyEvent e) {
            System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
    }

    public static void main(String[] args) {
        try {
            GlobalScreen.registerNativeHook();

            GlobalKeyListenerExample listener = new GlobalKeyListenerExample()
            GlobalScreen.getInstance().addNativeKeyListener(listener);

        } catch (NativeHookException ex) {
            System.err.println(ex.getMessage());
        }
    }
}

注: jnativehook は、プラットフォーム固有のネイティブ コードを使用して、キーボードおよびマウス イベントへのグローバル アクセスを取得しますが、これは Windows、Mac OS、および Linux に提供されるため、ほとんどの場合に機能するはずです。プラットフォームに問題がある場合は、プロジェクトのバグ トラッカーで報告してください。

于 2013-03-30T19:29:43.943 に答える
0

キーボード入力をJTextField または JTextAreaに簡単に取り込むことができます

于 2013-03-30T19:28:21.470 に答える
-1

Java はサンドボックス化されているため、ウィンドウの外でキーストロークを記録することはできないと思います。これには別の言語を使用する方がはるかに良いでしょう。

Java でそれを行うことに本当に固執している場合は、Hovercraft Full of Eels が話しているように、おそらく Swing で何かを行う必要があります。

私が想像しているのは、目に見えないウィンドウであり、フォーカスされている/前面に移動すると、キーストロークがキャプチャされます。これがJavaで可能かどうかは完全にはわかりません。

コンソール以外のウィンドウを表示しても問題ない場合は、Jframe を作成して、swing を使用して TextBox を追加するだけです。

于 2013-03-30T19:00:02.287 に答える