在Linux上由Robot发送时,KeyEvent.VK_CONTEXT_MENU不起作用

时间:2015-10-22 05:39:25

标签: java linux swing awt awtrobot

我正在尝试测试按下context menu键时显示菜单的Swing组件。我只是专注于组件并发送新闻&由机器人发布事件。它适用于Windows,但不适用于Linux。下面是一个示例Java代码,显示了键事件整数代码。运行此操作时,键事件设置为0.但是,当您物理按键时,它会正确显示为525.

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class ContextMenuKeyTest {
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel panel = new JPanel();
                JLabel label = new JLabel("Type something");
                JTextField comp = new JTextField("Hello World!");
                comp.setPreferredSize(new Dimension(300,100));
                panel.add(label);
                panel.add(comp);
                comp.addKeyListener(new KeyListener() {
                    @Override
                    public void keyTyped(KeyEvent e) {}
                    @Override
                    public void keyPressed(KeyEvent e) {
                        label.setText("Pressed: " + e.getKeyCode());
                    }
                    @Override
                    public void keyReleased(KeyEvent e) {}
                });

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
                try {
                    Robot robot = new Robot();
                    robot.keyPress(KeyEvent.VK_C);
                    robot.keyRelease(KeyEvent.VK_C);
                    robot.keyPress(KeyEvent.VK_CONTEXT_MENU);
                    robot.keyRelease(KeyEvent.VK_CONTEXT_MENU);
                } catch (AWTException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

windows键在被机器人按下时也无法正常工作,并且在物理按压时工作正常。其他键工作得很好。

使用IceWM在Ubuntu上进行测试,在使用Java 8的Xfce上使用Debian进行测试。

1 个答案:

答案 0 :(得分:1)

我不确定为什么使用Robot时键不起作用。作为一种解决方法,我使用xdotool通过调用发送密钥:

xdotool key Menu