gpt4 book ai didi

java - 如何将 JNativeHook 连接到 JavaFX 线程?

转载 作者:行者123 更新时间:2023-11-30 08:09:51 32 4
gpt4 key购买 nike

我正在制作一个在 Javafx 中具有图形用户界面的翻译程序。我正在使用 JNativeHook 在应用程序未处于焦点时启用全局键监听器。当同时按下 alt 和 t 时,程序应该会从任务栏恢复自身。

但是,当我按下 alt 和 t 时,出现错误,指出 JNativeHook 线程无法与 javafx 线程一起运行。

甚至可以让 GlobalScreen 线程与 javafx 线程通信吗?

这是我的全局 key 监听器代码

GlobalScreen.addNativeKeyListener(listener);

这是我的听众

                @Override
public void nativeKeyPressed(NativeKeyEvent nativeKeyEvent) {
if(nativeKeyEvent.getKeyCode() == NativeKeyEvent.VC_ALT_L){
alt = true;
}
if(nativeKeyEvent.getKeyCode() == NativeKeyEvent.VC_T){
t = true;
}

check();

}

@Override
public void nativeKeyReleased(NativeKeyEvent nativeKeyEvent) {
if(nativeKeyEvent.getKeyCode() == NativeKeyEvent.VC_ALT_L){
alt = false;
}
if(nativeKeyEvent.getKeyCode() == NativeKeyEvent.VC_T){
t = false;
}
}

@Override
public void nativeKeyTyped(NativeKeyEvent nativeKeyEvent) {

}
});

我得到的错误是

Exception in thread "JNativeHook Dispatch Thread" java.lang.IllegalStateException: Not on FX application thread; currentThread = JNativeHook Dispatch Thread
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:204)

如果您不熟悉 GlobalScreen,它基本上是在您的 Java 程序不在焦点上并且正在使用您计算机上的其他东西时向您的 Java 程序添加一个键盘监听器。

有什么方法可以让 JNativeHook 线程访问我的 javafx 线程,以便在程序最小化后使用热键重新打开程序?

最佳答案

只需将它们包装在 Platform.runLater 中,使它们在 FX 线程上运行,即:

    Platform.runLater( () -> {
if(nativeKeyEvent.getKeyCode() == NativeKeyEvent.VC_ALT_L){
alt = true;
}
if(nativeKeyEvent.getKeyCode() == NativeKeyEvent.VC_T){
t = true;
}

check();
} );

关于java - 如何将 JNativeHook 连接到 JavaFX 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32063229/

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