Полноэкранное Java-приложение сворачивается при включении заставки

У меня есть приложение, которое устанавливает полноэкранный кадр, но, похоже, сворачивает его при включении заставки. Я хочу, чтобы это приложение было единственным приложением, которое могут использовать пользователи киосков с сенсорным экраном, так что это проблема. Есть ли способ предотвратить это?


person davidahines    schedule 30.05.2011    source источник
comment
Какую операционную систему вы используете?   -  person Serafeim    schedule 30.05.2011
comment
нельзя просто отключить скринсейвер?   -  person Denis Tulskiy    schedule 30.05.2011
comment
Эти машины работают круглосуточно и без выходных, и мы бы предпочли не терять срок службы на сенсорных экранах за 600 долларов.   -  person davidahines    schedule 31.05.2011
comment
Это может быть то, что вы ищете: stackoverflow.com/a/28375740/1686442   -  person Scott Wardlaw    schedule 07.02.2015


Ответы (3)


Другой способ - добавить прослушиватель окон и сбросить состояние, когда он деактивирован:

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowDeactivated(WindowEvent e) {
                frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
                // or go to fullscreen mode here
            }
        });

Но лучше всего для начала отключить заставку.

person Denis Tulskiy    schedule 30.05.2011
comment
Это скорее тот путь, который я искал. - person davidahines; 31.05.2011

Интернет говорит, что межплатформенный способ добиться этого — запланировать события клавиатуры с помощью этого кода:

import java.awt.Robot;
public void disableScreenSaver() throws AWTException {
  Robot r = new Robot();
  r.waitForIdle();
  r.keyPress(KeyEvent.VK_CONTROL);
  r.keyRelease(KeyEvent.VK_CONTROL);
}

и запланировать его запуск каждые пару минут (например, с thread.sleep();). Таким образом, экранная заставка не появится.

Однако я понятия не имею о нехакерском кроссплатформенном решении, и я был бы очень рад увидеть его от кого-то, кто его знает :)

person Miki    schedule 30.05.2011
comment
Не используйте для этого thread.sleep(); в одном потоке в цикле. Вместо этого используйте ScheduledExecutorService. - person Simon Forsberg; 11.03.2014

Вероятно (не пробовал!) Вы получите ответ, объединив ответы на эти вопросы:

Вызов метода Win32 API из Java

Необходимо отключить экранную заставку/экран блокировка в Windows C#/.Net

Конечно, это работает только в Windows, поэтому я спросил вас о вашей ОС :)

person Serafeim    schedule 30.05.2011