keyReleases имитируют нажатия клавиш в Linux (Java Swing GUI) - PullRequest
4 голосов
/ 30 июня 2011

У меня есть приложение с графическим интерфейсом для киоска, над которым я работаю, и оно требует от меня запретить пользователям возможность 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, которые постоянно нажимались.Кнопки на моем графическом интерфейсе постоянно менялись, и я смог открыть терминал (я установил бэкдор в приложении во время тестирования на случай, если что-то подобное), который не позволил бы мне что-либо печатать, потому что Tab перечисляет все файлытекущий каталог.

Может кто-нибудь сказать мне, будет ли исправление, которое будет работать как в среде Linux, так и в среде Windows.Однако, если бы мне пришлось выбирать, я бы пошел на Linux.

РЕДАКТИРОВАТЬ: Я также могу подтвердить, что клавиша Alt "нажата".Что за странное поведение?

1 Ответ

3 голосов
/ 03 июля 2011

Забудьте захватить Alt + Tab с помощью таких хаков.Это плохой хак и он подвержен ошибкам.Есть также много других комбинаций горячих клавиш.

Для linux у вас есть два варианта:

  1. Использовать минимальный оконный менеджер или вообще не использовать оконный менеджер.Например, с fluxbox вы можете полностью удалить все привязки клавиш, а также по умолчанию развернуть свое приложение и т. Д. Вы можете очистить меню рабочего стола, чтобы пользователь не мог управлять им, даже когда ваше приложение падает .Это чистое решение, которое действительно решает вашу проблему вместо некоторых ее частей.Существует много способов работы с системой, кроме Alt + Tab.

  2. Полностью захватить элементы управления вводом.Это то, что делают игры.Например, libSDL делает это за вас, и для функциональности также есть java-обертки.Это также должно работать должным образом, за исключением того, что вы используете оконный менеджер, который не позволяет захватывать элементы управления вводом по умолчанию (я ничего не знаю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...