1

プログラムを実行したいのですが、一度 esc を押してプログラムを終了します。これを行う唯一の方法は、スキャナーを実行して次の行を探すことですが、それではプログラム全体が一時停止します。キーリスナーかもしれませんが、常にチェックするにはどうすればよいですか? そしてそれはGUIです。どんな助けでも素晴らしいでしょう!

static Scanner sc = new Scanner(System.in);

stop = sc.nextLine();

if (stop.equals(a)){
running = false;
}
else{
do program
}
4

2 に答える 2

2

フレームを使用する場合は、キーを登録できます。

myFrame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
    KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "EXIT"); 
    myFrame.getRootPane().getActionMap().put("EXIT", new AbstractAction(){ 
        public void actionPerformed(ActionEvent e)
        {
            myFrame.dispose();
        }
    });
于 2013-06-11T00:31:12.373 に答える
1

これが UI である場合、イベント ディスパッチ スレッドをブロックする可能性のある種類のループを維持するべきではありません。

EDT は主要なイベントをプログラムにディスパッチし、通知に登録している場合はそれらに応答できます。

KeyListener登録されているコンポーネントがフォーカスされ、応答する前にキーボードフォーカスが必要になるため、回避します。

代わりに、Key Bindings APIを使用します。

Escapeキーは、メイン アプリケーション ウィンドウ (またはサブ コンポーネント) に登録するか、JButtonアプリケーションを閉じるために使用している に直接登録できます。

于 2013-06-11T00:28:27.017 に答える