Java 如何使程序在等待事件时保持打开状态
我希望它保持打开状态并等待事件发生,但一旦它打开,它就会关闭。如何解决此问题?Java 如何使程序在等待事件时保持打开状态,java,Java,我希望它保持打开状态并等待事件发生,但一旦它打开,它就会关闭。如何解决此问题? static void hi() { System.out.println("g"); } public static void main(String[] args) { } @Override public void KeyPressed(KeyEvent e) { hi(); } @Override public void KeyReleased(KeyEvent
static void hi() { System.out.println("g"); }
public static void main(String[] args)
{
}
@Override
public void KeyPressed(KeyEvent e) {
hi();
}
@Override
public void KeyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void KeyTyped(KeyEvent e) {
// TODO Auto-generated method stub
} <code>
编辑:即使我有一个帧,也要等待。当我按下某个键时,它不会运行hi()您不会创建任何窗口来获取事件。您的
main
函数为空,因此您的程序不执行任何操作:其进程在启动后关闭
请看教程。您将在第节中找到最简单的Hello World GUI应用程序,请参阅
仅仅创建一个框架是不够的:您必须在框架或其他组件上注册
keylister
。以下是完整的示例:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class PressKey implements KeyListener, Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new PressKey());
}
@Override
public void run() {
JFrame frame = new JFrame("Press a key");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(this);
frame.setSize(300, 150);
frame.setVisible(true);
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
System.out.println("Key pressed: " + e.getKeyChar());
}
}
它是如何工作的?函数main
创建PressKey
类的实例,并将其传递给SwingUtilities.invokeLater
实用方法。这是必需的,因为Swing不是线程安全的,对GUI组件的所有修改都必须在事件调度线程(EDT)上执行。因此,invokeLater
将作业调度到EDT;因此,PressKey.run()
将在EDT上运行:我们在EDT上创建帧并注册附加到帧的KeyListener
,然后显示帧。当画面显示在屏幕上时,按任意键:您将看到控制台中打印的相应字符。如果您按下一个功能键或另一个不生成输入字符的键,您将看不到任何打印内容,因为在这种情况下,不会生成KeyEvent.key\u TYPED
有关更多信息,请参阅。我假设您从教程中复制了此代码?缺少了一些东西。正如Alexey提到的,“main”方法是程序的入口点,如果主方法中没有代码,那么程序什么也不做。你应该做一些事情,比如创建一个新的线程、框架、窗口等等,不管你想让你的关键侦听器连接到什么 在创建一个永远运行的线程的更广泛的上下文中,您可以执行以下操作
while(true) {
Thread.sleep(100);
}
尽管您可能希望将“true”更改为“myflag”,这可以从代码中的其他位置设置以终止线程