将eventHandler添加到线程中的场景

时间:2019-06-26 18:02:57

标签: java javafx

我正在尝试将eventHandler添加到场景中以进行键盘侦听(上下键在Javafx应用程序中移动对象)。

我尝试将这个处理程序添加到initialize()的场景中,但是(如预期的那样)获得了NullPointerException。现在,我试图在以initialize()启动的线程中实现我的目标。

    keyEventEventHandler = (keyEvent -> {
        switch (keyEvent.getCode()) {
            case DOWN:
                moveRectangle(player1, 20.0, panePlayer1);
                break;
            case UP:
                moveRectangle(player1, 10.0, panePlayer1);
                break;
        }
    });

    Task task_keyboard = new Task() {
        @Override
        protected Object call() throws Exception {
            System.out.println("keyboard thread active");
            Scene scene = null;
            while(scene == null){
                scene = pane.getScene();
                System.out.println(scene);
                Thread.sleep(100);
            }
            scene.setOnKeyPressed(keyEventEventHandler);
            System.out.println("event added");
            return null;
        }
    };

    new Thread(task_keyboard).start();

现在在控制台中,我仅收到消息“键盘线程处于活动状态”,而没有其他消息。背后的原因是什么?完全是添加该处理程序的好方法吗?

0 个答案:

没有答案