使用java.awt.Robot模拟退格键

使用java.awt.Robot模拟退格键似乎存在问题。

这个线程似乎证实了这一点,但它没有提出解决方案。

这有效:

 Robot rob = new Robot(); rob.keyPress(KeyEvent.VK_A); rob.keyRelease(KeyEvent.VK_A); 

这不是:

 Robot rob = new Robot(); rob.keyPress(KeyEvent.VK_BACK_SPACE); rob.keyRelease(KeyEvent.VK_BACK_SPACE); 

有任何想法吗?

它似乎在这个测试中起作用。

附录:关于引用的文章,“除了Java语言定义的那些键( VK_ENTERVK_BACK_SPACEVK_TAB )之外,不要依赖VK_ constants的值.Sun保留根据需要更改这些值的权利。将来可以容纳更广泛的键盘。“ – java.awt.event.KeyEvent

 public class RobotTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { new RobotTest().create(); } }); } private void create() { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); f.setLayout(new FlowLayout()); f.add(new JTextField(8)); final JButton b = new JButton(); f.getRootPane().setDefaultButton(b); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { b.setText("@" + e.getWhen()); } }); f.add(b); f.setSize(256, 128); f.setVisible(true); doTest(); } private void doTest() { try { Robot r = new Robot(); int[] keys = { KeyEvent.VK_T, KeyEvent.VK_E, KeyEvent.VK_S, KeyEvent.VK_T, KeyEvent.VK_Z, KeyEvent.VK_BACK_SPACE, KeyEvent.VK_ENTER }; for (int code : keys) { r.keyPress(code); r.keyRelease(code); } } catch (AWTException ex) { ex.printStackTrace(System.err); } } } 

Backspacefunction无法按预期工作。 我在Backspace中添加了一个Shift键,它对我来说很好用,这里是伪代码。

 robot.keyPress(KeyEvent.VK_SHIFT); robot.keyPress(KeyEvent.VK_BACK_SPACE); robot.keyRelease(KeyEvent.VK_BACK_SPACE); robot.keyRelease(KeyEvent.VK_SHIFT); 

但这似乎不适用于Delete键。