当前位置: 首页 > 知识库问答 >
问题:

如何将JNativeHook连接到JavaFX线程?

左丘元徽
2023-03-14

我正在制作一个具有JavaFX图形用户界面的翻译程序。我正在使用JNativeHook来启用全局keylisteners,当应用程序不在焦点中时。当alt和t同时按下时,程序应该从任务栏中恢复自己。

但是,当我按alt和t时,它会出现一个错误,说明JNativeHook线程不能与javafx线程一起运行。

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)

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

共有1个答案

刘和玉
2023-03-14

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

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

        check();
    } );
 类似资料:
  • 我正在尝试将 kafka 与 windows 上的 mysql 连接起来。我没有使用汇合。我的 kafka 版本是 2.12 我已经启动了动物园管理员、Kafka、生产者和消费者,这一切都很好用。 我的MysQL版本是8.0.15 我已经在libs文件夹中复制了这3个jar文件 我的源代码quickstart mysql。属性文件代码为 当我运行命令时 我在控制台上收到此错误 请帮助我。 我也试过

  • 问题内容: 我的Java程序出现这些错误。我已经把我的类路径放在里面了。如何解决呢? 代码: 问题答案: 您需要从下载MySQL包:这里并将其放置在库中,我将修改在少数分钟excact步骤 这是连接数据库的正确语法: 希望这可以帮助

  • 我在我的运行系统中有MongoDB和Robomongo,我使用Robomongo作为客户端。 我已将MongoDB安装在另一个系统上,我将其视为服务器,我想将我系统的Robomongo(作为客户端)连接到另一个系统(服务器)上的MongoDB。我应该采取哪些步骤来实现同样的目标? 我使用的是机器名,因为系统的IP地址不是静态的。但即使我使用系统的IP地址,我也会遇到同样的错误: 连接失败,无法连接

  • 我正在尝试将node.js连接到MySQL,但失败了。我已经安装了MySQL和相关库。如何解决此错误?另外,如果我想让数据响应为原生的,我应该如何去做呢? 收到的错误消息:

  • 您好,我正在开发一个应用程序,通过无线网络连接到爱普生打印机和打印收据。我的android手机和打印机(TM-T88V-DT)都连接到同一个无线网络,但我的应用程序无法与打印机连接。我已经按照epson技术文档中的说明设置了打印机和无线连接,我正在使用随epson epos sdk for android提供的示例进行测试,但示例应用程序未与打印机连接。我不知道我的设置出了什么问题,请帮忙。

  • 问题内容: 我已经安装了MySQL(最新更新)。我需要编写代码,这将创建并与SQL DB建立连接并管理DB(使用SELECT,INSERT,CREATE)。 我已完成所有操作,但无法建立连接。我还安装了MySQL / J连接器,我只是将包提取到一个文件夹中,并在 Variables中 添加了文件夹路径。 谁能告诉我下一行中的URL是wat的意思吗? 我已经试过了: 但这不起作用。我无法理解术语“