Java NativeKeyListener 已完成,退出代码为 0

Java NativeKeyListener finished with exit code 0

我正在尝试制作一个可以检测我的击键然后基于它们做一些事情的程序但是每次我 运行 我的程序它只是以退出代码 0 结束,即使我已经初始化了任何监听器想法? (我没有错误)

public class Main {

    public static void main(String[] args) {
        InitializeEvents initializeEvents = new InitializeEvents();
        try {
            GlobalScreen.registerNativeHook();
        } catch (NativeHookException e) {
            e.printStackTrace();
        }
        GlobalScreen.getInstance().addNativeKeyListener(initializeEvents.getKeyboard());
        GlobalScreen.getInstance().addNativeMouseListener(initializeEvents.getMouse());
       }
    }

这是我初始化事件的地方

    public class InitializeEvents {
       private final NativeKeyboardEvent keyboard;
       private final NativeMouseClickEvent mouse;

       public InitializeEvents() {
           keyboard = new NativeKeyboardEvent();
           mouse = new NativeMouseClickEvent();
       }

       public NativeKeyboardEvent getKeyboard() {
           return keyboard;
       }

       public NativeMouseClickEvent getMouse() {
           return mouse;
       }
    }

最后是我的活动

    public class NativeKeyboardEvent implements NativeKeyListener {
    
       @Override
       public void nativeKeyPressed(NativeKeyEvent e) {
           System.out.println("test");
       }

       @Override
       public void nativeKeyReleased(NativeKeyEvent e) {
           System.out.println("test");
       }

       @Override
       public void nativeKeyTyped(NativeKeyEvent e) {
           System.out.println("test");
       }
    }

关于它的奇怪之处在于它早些时候工作但是当我点击一个键时它随机停止打印“测试”即使没有任何改变。

一旦您的应用程序不再有任何非守护线程 运行,它就会终止。您可以通过输入

轻松验证这一点
while(true) {
    Thread.sleep(Long.MAX_VALUE);
}

在您的 main 方法的最后一行。最终,我可以想象您的应用程序将有一个活动的 window 或一个任务栏图标,使其保持活动状态并添加一个应用程序退出选项,从而取代对这个临时解决方案的需要。