JavaFX和jnativehook库冲突

JavaFX和jnativehook库冲突,java,javafx,keyboard,listener,jnativehook,Java,Javafx,Keyboard,Listener,Jnativehook,我使用jnativehook进行全局键盘监听。我在JavaFX11中创建了GUI。我有一个文本字段来定义在按指定的组合键后创建的文件的名称 问题是我不能用键盘编辑文本字段中的文本。我可以用鼠标删除或粘贴文本,但不能用键盘 我为全局键盘监听创建了一个单独的线程。我的想法是在文本字段聚焦时停止此线程。不幸的是,我的尝试失败了 下面是一个导致类似问题的最小可重复性示例: Main.java Controller.java 请创建一个演示问题的示例,然后通过添加到您的问题中。告诉人们您正在使用哪个库。提

我使用jnativehook进行全局键盘监听。我在JavaFX11中创建了GUI。我有一个文本字段来定义在按指定的组合键后创建的文件的名称

问题是我不能用键盘编辑文本字段中的文本。我可以用鼠标删除或粘贴文本,但不能用键盘

我为全局键盘监听创建了一个单独的线程。我的想法是在文本字段聚焦时停止此线程。不幸的是,我的尝试失败了

下面是一个导致类似问题的最小可重复性示例:

Main.java

Controller.java


请创建一个演示问题的示例,然后通过添加到您的问题中。告诉人们您正在使用哪个库。提示,请注意,此方法具有removeKeyListener方法。我编写了一个方法,当文本字段被聚焦时,它将侦听器从钩子中移除。它的工作,但问题仍然存在-我不能编辑文本。
public class Main extends Application {
private static final int APP_WIDTH = 400;
private static final int APP_HEIGHT = 400;

public static void main(String[] args) {
    SpringApplication.run(Main.class, args);
    launch(args);
}

@Override
public void start(Stage stage) throws Exception {
    var fxmlLoader = new FXMLLoader(getClass().getResource("/main.fxml"));
    Parent root = fxmlLoader.load();
    stage.setTitle("Example");
    stage.setScene(new Scene(root, APP_WIDTH, APP_HEIGHT));
    stage.show();

    Thread background = new Thread(() -> Platform.runLater(() -> {
        GlobalKeyboardHook keyboardHook = new GlobalKeyboardHook(true);

        keyboardHook.addKeyListener(new GlobalKeyAdapter() {

            @Override
            public void keyPressed(GlobalKeyEvent keyEvent) {
                System.out.println("Key pressed: " + keyEvent.getVirtualKeyCode());
            }

            @Override
            public void keyReleased(GlobalKeyEvent keyEvent) {
                System.out.println("Key released: " + keyEvent.toString());
            }
        });
    }));
    background.start();
}
public class Controller implements Initializable {
    @FXML
    private TextField filePath;

    private static String filePathString = "filePathString";

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        handleFilePath();
    }

    private void handleFilePath() {
        filePath.textProperty().setValue(filePathString);
        filePath.textProperty().addListener(((observable, oldValue, newValue) -> {
            filePath.commitValue();
        }));
    }
}