2016-10-10 4 views
0

У меня возникают проблемы с попыткой использования KeyListener в java.
Я пытаюсь написать программу, которая запускается до нажатия клавиши, а затем выводит этот ключ.
Это шаг к более сложному коду, поэтому использование метода для печати нажатой клавиши просто используется как своего рода прототип.Как правильно использовать keyListener в Java

Вот код:

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

public class keylistener implements KeyListener{ 
    public keylistener(){ 
     addKeyListener(this); 
    } 

    public void keyPressed(KeyEvent e){ 
     int key = e.getKeyCode(); 
     keylistener output = new keylistener(); 
     output.print(key); 
    } 

    public void keyReleased(KeyEvent e){} 
    public void keyTyped(KeyEvent e){} 

    public void print(int key){ 
     System.out.println(key); 
    } 

    public static void main(String[] args){ 
    } 
} 

Трассы программы, а затем заканчивается сразу же после.
Я раньше не использовал KeyListener, и я не могу понять, как заставить программу ждать нажатия клавиши.

+1

Ваш основной метод пуст .... Обычно вы используете keylistener с графическим интерфейсом, хотя –

ответ

0

Я не думаю, что когда-либо добавлял KeyListener в консольное приложение (возможно, потому, что KeyListener является частью пакета AWT, в котором в основном есть компоненты GUI), но вот пример графического интерфейса для демонстрации.

Ваша первая проблема, однако, заключается в том, что вы должны были добавлены new keylistener() в ваш метод main, хотя что должны быть добавлены к самому компоненту для того, чтобы бежать.

public class GuiMain extends JFrame { // A GUI Frame 

    public GuiMain() { 
     // Add the listener 
     this.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyPressed(KeyEvent e) { 
       super.keyPressed(e); 
       // Print out the code 
       System.out.println(e.getKeyCode()); 
      } 
     }); 

     // Show something 
     add(new JLabel("Hello World!")); 
     pack(); 
    } 

    public static void main(String[] args) { 
     // Run the GUI 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       GuiMain gui = new GuiMain(); 
       gui.setVisible(true); 
      } 
     }); 
    } 

} 
1

KeyListener предназначен для использования в графических приложениях, а не в консольных приложениях, поскольку KeyListener требует запуска компонентов GUI. Обычно в консольном приложении вы используете BufferedReader и InputStreamReader.

Это консольное приложение, которое демонстрирует идею использования цикла while с BufferedReader и InputStreamReader, чтобы приложение работало в ожидании ввода. Хотя есть и другие способы сделать это. Я сделал это очень откровенно, чтобы вы могли понять концепцию.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 


public class StackStuff { 

public static void main(String[] args) throws IOException { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    boolean runs = true ; 
    System.out.println("Press any key to kill this app..."); 
    while(runs){ 
      input =br.readLine(); 
     if (!(input==null)){ 
      System.out.println(input); 
      runs=false; 
      } 
     } 
    System.out.println("I am dead!!"); 
    System.exit(0); 

}