#java #awt #keylistener
#java #awt #keylistener
Вопрос:
Я сталкиваюсь с проблемами, пытаясь использовать 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 с графическим интерфейсом, хотя
Ответ №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);
}
Ответ №2:
Я не думаю, что я когда-либо добавлял 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);
}
});
}
}