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

我有一个我正在处理的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键被“按下”.这种奇怪的行为是什么?

解决方法:

忘了用这样的黑客抓住Alt Tab.这是一个糟糕的黑客,它容易出错.还有很多其他热键组合.

对于Linux,您有两个选择:

>根本不使用最小窗口管理器或窗口管理器.例如,使用fluxbox,您可以完全删除所有键绑定,也可以默认使应用程序最大化等.您可以清空桌面菜单,这样即使应用程序崩溃,用户也无法控制.这是一个干净的解决方案,真正解决您的问题,而不是它的一些部分.除了Alt Tab之外,还有很多方法可以摆弄系统.
>完全抓取输入控件.这就是游戏的功能.例如,libSDL为您完成它,并且还有用于该功能的java包装器.这应该也可以按预期工作,除了你使用一个窗口管理器,它不允许每个默认输入控件抓取(我不知道任何).

上一篇:Kotlin开发 委托


下一篇:kotlin-延迟初始化