gpt4 book ai didi

java - 如何让程序在等待事件时保持打开状态

转载 作者:行者123 更新时间:2023-12-01 13:51:19 24 4
gpt4 key购买 nike

我希望它保持打开状态并等待事件发生,但是一旦打开它就会关闭,我该如何解决这个问题?

    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>

编辑:WAITING,即使我确实有一个框架,当我按下一个键时,它也不会运行 hi()

最佳答案

您没有创建任何窗口来获取事件。您的 main 函数是空的,因此您的程序不执行任何操作:其进程在启动后关闭。

看看Creating a GUI with Swing教程。您将在 Compiling and Running Swing Programs 中找到最简单的 Hello World GUI 应用程序。部分,参见HelloWorldSwing.java .

<小时/>

仅仅创建一个框架是不够的:您必须在框架或其他组件上注册KeyListener。这是完整的示例:

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 上运行:这是我们创建框架并注册附加到框架的 KeyListener 的地方,然后我们显示框架。当屏幕上显示该框架时,按任意键:您将看到控制台中打印相应的字符。如果您按功能键或其他不生成输入字符的键,您将看不到任何打印内容,因为在这种情况下不会生成 KeyEvent.KEY_TYPED

有关详细信息,请参阅 How to Write a Key Listener .

关于java - 如何让程序在等待事件时保持打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19936876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com