我在尝试在java中使用KeyListener时遇到了问题 我正在尝试编写一个程序,该程序一直运行直到按下一个键,然后输出该键 这是更精细代码的踏脚石,因此使用方法打印按下的键只是用作一种原型。
以下是代码:
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,我无法弄清楚如何使程序等待按下键。
答案 0 :(得分:1)
KeyListener旨在用于GUI应用程序,而不是用于控制台应用程序,因为KeyListener需要运行GUI组件。通常在控制台应用程序中,您将使用BufferedReader和InputStreamReader。
这是一个控制台应用程序,演示了使用带有BufferedReader和InputStreamReader的while循环以保持应用程序运行等待输入的想法。虽然还有其他方法可以做到这一点。我明确表达了这一点,因此你可以掌握这个概念。
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);
}
答案 1 :(得分:0)
我认为我没有将KeyListener添加到控制台应用程序中,(可能是因为KeyListener
是AWT包的一部分,主要有GUI组件),但这里有一个示例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);
}
});
}
}