当前位置: 首页 > article >正文

Java实现动态切换ubuntu壁纸功能

1.在一个文件夹放好图片

2.读取文件夹的图片路径,放入数组

3.调用命令将图片逐个设置为壁纸

使用 Java 在 Ubuntu Linux 系统中实现自动切换壁纸的示例程序。这个程序使用了gnome-desktop-item-edit命令来设置壁纸,并通过定时任务来定期切换壁纸


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Timer;
import java.util.TimerTask;

public class WallpaperChangerGUI extends JFrame {

    private Timer timer;
    private String[] imagePaths;
    private int currentImageIndex;
    private Point initialClick;
    public WallpaperChangerGUI() {
        setTitle("Wallpaper Changer");

        // 去掉标题栏
        setUndecorated(true);

        // 设置窗口半透明
        setOpacity(0.3f);

        setSize(300, 150);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setLayout(new FlowLayout());

        JButton startButton = new JButton("Start");
        JButton stopButton = new JButton("Stop");

        startButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                startChangingWallpaper();
            }
        });

        stopButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                stopChangingWallpaper();
            }
        });

        add(startButton);
        add(stopButton);

        JButton exitButton = new JButton("Exit");
        exitButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        add(exitButton);

        // 添加鼠标拖动功能
        addMouseListener(new MouseAdapter() {


            @Override
            public void mousePressed(MouseEvent e) {
                initialClick = e.getPoint();
                //System.out.println("press");
            }

        });

        addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                if (initialClick!= null) {
                    Point currentPos = e.getLocationOnScreen();
                    setLocation(currentPos.x - initialClick.x, currentPos.y - initialClick.y);
                }
            }
        });

        // 假设你的图片路径数组
        imagePaths = new String[]{"/home/xxx/图片/壁纸/No.2358/0009.jpg",
                "/home/xxx/图片/壁纸/No.2358/0010.jpg",
                "/home/xxx/图片/壁纸/No.2358/0022.jpg"

            };
        currentImageIndex = 0;

    }

    public void startChangingWallpaper() {
        if (timer == null) {
            timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    setWallpaper(imagePaths[currentImageIndex]);
                    currentImageIndex = (currentImageIndex + 1) % imagePaths.length;
                }
            }, 0, 5*1000); // 每一分钟切换一次壁纸,可以根据需要调整时间间隔
        }
    }

    public void stopChangingWallpaper() {
        if (timer!= null) {
            timer.cancel();
            timer = null;
        }
    }

    public static void setWallpaper(String imagePath) {
        try {
            // 使用 gnome-desktop-item-edit 命令设置壁纸
            Process process = Runtime.getRuntime().exec(new String[]{
                    "gsettings", "set", "org.gnome.desktop.background", "picture-uri", "file://" + imagePath
            });
            process.waitFor();
            if (process.exitValue() == 0) {
                System.out.println("Wallpaper set successfully to " + imagePath);
            } else {
                System.out.println("Failed to set wallpaper.");
            }
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            WallpaperChangerGUI gui = new WallpaperChangerGUI();
            gui.setVisible(true);
        });
    }
}



http://www.kler.cn/a/377970.html

相关文章:

  • 专业网页设计服务重要是什么
  • 彻底解决idea不识别java项目
  • 基于STM32的手式电视机遥控器设计
  • 【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024,11月29-12月1日)
  • 全志A133 android10 LVDS幅值调节
  • 规划误差降低27%,碰撞率降低33%Senna: 大规模视觉-语言模型与端到端自动驾驶相结合
  • 自定义日志打成jar包引入项目后不生效
  • 3D Gaussian Splatting 入门
  • 8.5K+ Star!Skyvern:一个基于LLMs和计算机视觉自动化浏览器工作流的工具
  • Day 41 || 1049. 最后一块石头的重量 II 、494. 目标和、474.一和零
  • 机器学习之fetch_olivetti_faces人脸识别--基于Python实现
  • 数据智能驱动金融策略优化:民锋智能分析技术的应用
  • 深度学习-38-基于PyTorch的卷积神经网络AlexNet
  • 【Java笔记】1-JDK/JRE/JVM是个啥?
  • Golang | Leetcode Golang题解之第518题零钱兑换II
  • pgsql数据量大之后可能遇到的问题
  • SpringCloudAlibaba实战入门之OpenFeign高级用法(十)
  • 数据结构-二叉树中的递归
  • [每周一更]-(第121期):模拟面试|微服务架构面试思路解析
  • 虚函数和纯虚函数是 C++ 中实现多态性的关键概念
  • 【算法笔记】位运算算法原理深度剖析
  • 单向函数、单向陷门函数、困难问题
  • PHP的 CSRF、XSS 攻击和防范
  • promise的catch放在then前面的场景
  • OpenGL入门003——使用Factory设计模式简化渲染流程
  • 从零开始的c++之旅——继承