keyReleases模拟Linux中的keyPresses(java Swing GUI)

时间:2011-06-30 14:38:56

标签: java linux debugging swing keypress

我有一个我正在处理的kiosk GUI应用程序,它要求我阻止用户从全屏窗口中删除Alt-Tab。我在一段时间后发布了一个关于此问题的问题,一位成员帮助我编写了一些代码,这些代码在Windows环境下运行良好。

这是:

public class TabStopper implements Runnable {

    private boolean isWorking = false;
    private MenuFrame parent;

    public TabStopper(MenuFrame parent) {
        this.parent = parent;
        new Thread(this, "TabStopper").start();
    }

    public void run() {
        this.isWorking = true;
        Robot robot;
        try {
            robot = new Robot();

            while (isWorking) {
                robot.keyRelease(KeyEvent.VK_ALT);
                robot.keyRelease(KeyEvent.VK_TAB);
                parent.requestFocus();
                Thread.sleep(10); 
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void stop() {
        this.isWorking = false; 
    }

    public boolean isWorking() {
        return this.isWorking;
    }
}

但是,我需要这个能够在Linux中工作。我从源代码创建了一个可执行jar,并将其引入Linux。除Alt和Tab键之外的所有功能都在不断按下。我的GUI上的按钮一直在循环,我能够打开一个终端(我在测试期间在应用程序中设置一个后门,以防万一这样的事情发生),这不会让我输入任何内容,因为Tab列出了所有文件当前目录。

有人能告诉我是否有适用于Linux和Windows环境的修复程序。但是,如果我不得不选择,我会选择Linux。

编辑:我还可以确认Alt键正在“按下”。这怪异的行为是什么?

1 个答案:

答案 0 :(得分:3)

忘记用这样的黑客攻击Alt + Tab。这是一个糟糕的黑客,它容易出错。还有很多其他的热键组合。

对于Linux,您有两种选择:

  1. 根本不使用最小窗口管理器或窗口管理器。例如,使用fluxbox,您可以完全删除所有键绑定,也可以默认使应用程序最大化等。您可以清空桌面菜单,以便即使应用程序崩溃,用户也无法控制即可。这是一个干净的解决方案,可以真正解决您的问题,而不是部分部分。除了Alt + Tab之外,还有很多方法可以摆弄系统。

  2. 完全抓取输入控件。这就是游戏的功能。例如,libSDL为您完成它,并且还有用于该功能的java包装器。这也应该按预期工作,除了你使用一个窗口管理器,默认情况下不允许输入控制抓取(我不知道)。