我目前正在为当地消防部门编写一个程序,以显示必须占用的救火车,警报的目的地等。
程序本身是用Java编写的,运行在连接到电视屏幕的覆盆子pi上。为了保护屏幕不会停留在同一个站点和内容并防止屏幕烧毁,我想让屏幕进入睡眠状态或在警报结束时打开屏幕保护程序(命令将通过TCP发送,但是&# 39;不是问题)。我还希望在收到新警报时重新启动屏幕。
我无法找到能让屏幕进入睡眠状态或屏幕保护程序的解决方案,并重新启动它。有没有人做过这样的事情?
答案 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访问计算机本机功能,并将其设置为显示屏幕保护程序或在那里睡觉。