我在阶段 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/