java - 在 JavaFX 阶段使用 java.awt.Robot 安全吗?

标签 java swing javafx

我在阶段 init() 方法中有以下代码,以便在窗口打开时按“SPACE”:

Platform.runLater(() -> {
    try {
        java.awt.Robot r = new java.awt.Robot();
        r.keyPress(java.awt.event.KeyEvent.VK_SPACE);
        r.keyRelease(java.awt.event.KeyEvent.VK_SPACE);
    } catch (Exception e) {
        e.printStackTrace();
    }
});

但是由于 Robot 属于 java.awt 包,并且知道 JavaFX 与 Swing/awt 运行在不同的线程中,所以我不知道这是否安全。 我只知道它能满足我的要求,但它会一直有效吗?我应该将此代码替换为其他代码吗?

最佳答案

是的,我在普通线程中使用了它(不使用 Platform.runLater()),即使使用这样的 UI 事件,它也能正常工作:

static Robot robot=null;

private void initialize(){
        Thread hilo=new Thread(new Runnable(){
            @Override
            public void run() {
                try {
                    robot=new Robot();
                    robot.waitForIdle();
                } catch (AWTException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }});

        hilo.start();
}

然后是事件方法

public static void handleMultiSelectIn(){
        try{
            if(togleMulti.isSelected())
                robot.keyPress(KeyEvent.VK_CONTROL);
            System.out.println("In:"+togleMulti.isSelected());
        }catch(Exception e){
            e.printStackTrace();
        }
    }

关于java - 在 JavaFX 阶段使用 java.awt.Robot 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440691/

相关文章:

java - 在Java中通过剪切生成方形缩略图(不破坏纵横比)?

java - 在库类 android.content.pm.PackageManager 中找不到引用的方法 boolean isInstantApp()

javafx 8 兼容性问题 - FXML 静态字段或方法

java - 物质外观的问题

java - WildFly : org/xnio/Cancellable : Unsupported major. 次要版本 51.0 的 Eclipse 错误

java - 无法跨类更改 JLabel

java - GridBagLayout 坐标困惑

java - javafx ListView 中的多个标签和图像

java - 控件的首选大小是多少?

java - 如何根据 JavaFX 中的内容设置窗口最小尺寸?