Java - 将屏幕置于睡眠状态(或屏幕保护程序)

时间:2015-08-12 18:43:22

标签: java sleep screensaver standby

我目前正在为当地消防部门编写一个程序,以显示必须占用的救火车,警报的目的地等。

程序本身是用Java编写的,运行在连接到电视屏幕的覆盆子pi上。为了保护屏幕不会停留在同一个站点和内容并防止屏幕烧毁,我想让屏幕进入睡眠状态或在警报结束时打开屏幕保护程序(命令将通过TCP发送,但是&# 39;不是问题)。我还希望在收到新警报时重新启动屏幕。

我无法找到能让屏幕进入睡眠状态或屏幕保护程序的解决方案,并重新启动它。有没有人做过这样的事情?

3 个答案:

答案 0 :(得分:1)

不幸的是,Java没有内置的库。但是,你可以做到

Runtime.getRuntime().exec("xscreensaver-command -activate");

要停用屏幕保护程序,请执行

Runtime.getRuntime().exec("xscreensaver-command -deactivate");

此外,请确保已安装xscreensaver

sudo apt-get install xscreensaver

我不知道这是否有助于减少屏幕上的热量,但您可以尝试

public class ScreenSaver {
    private static final JFrame frame = new JFrame();

    public static void startScreenSaver() throws Exception {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
         frame.setBackground(Color.BLACK);
         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         frame.setResizable(false);
         frame.setUndecorated(true);
         frame.validate();
         GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(frame);
         frame.setVisible(true);
    }

    public static void stopScreenSaver() {
         frame.setVisible(false);
    }
}

答案 1 :(得分:0)

没有办法从普通的java做到这一点。您将需要求助于特定于平台的API(使用JNI),或者如果可用于特定于该平台的命令行实用程序。

尽可能自己模拟屏幕保护程序,只会浪费更多电量(您正在积极地绘制浪费CPU / GPU电源的东西,并且屏幕不会进入待机状态。)

最好删除从您的应用程序控制屏幕的想法。而是将其留给操作系统 - 任何平台都应该很容易设置,以便在没有用户输入的情况下关闭屏幕。

答案 2 :(得分:-1)

我认为java不允许您控制计算机上的本机功能,例如睡眠或站立。

您可以选择几个选项:

1)如果您的程序始终处于焦点,您可以拥有一个线程来跟踪您的程序未被触摸的时间,然后您可以激活程序中的“屏幕保护程序”。

2)您可以使用JNA访问计算机本机功能,并将其设置为显示屏幕保护程序或在那里睡觉。