我有一个我正在处理的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包装器.这应该也可以按预期工作,除了你使用一个窗口管理器,它不允许每个默认输入控件抓取(我不知道任何).