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

 更新时间:2024年11月07日 10:36:21   作者:ximen502_  
这篇文章主要为大家详细介绍了如何使用 Java 在 Ubuntu Linux 系统中实现自动切换壁纸的示例程序,感兴趣的小伙伴可以跟随小编一起学习一下

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);
        });
    }
}

到此这篇关于基于Java实现动态切换ubuntu壁纸功能的文章就介绍到这了,更多相关Java动态切换ubuntu壁纸内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中String类(StringBuffer、StringBuilder)相关(最新推荐)

    Java中String类(StringBuffer、StringBuilder)相关(最新推荐)

    Java中的String类是不可变的,存储在字符串常量池中,提供了多种方法用于操作字符串,为了提高效率,可以使用StringBuilder或StringBuffer,本文介绍Java中String类(StringBuffer、StringBuilder)相关知识,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • SpringMVC注解之@ResponseBody注解原理

    SpringMVC注解之@ResponseBody注解原理

    今天带大家分析一下@ResponseBody注解原理,文中有非常详细的介绍及代码示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Java Process.waitFor()方法详解

    Java Process.waitFor()方法详解

    这篇文章主要介绍了Java Process.waitFor()方法详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java开发JUC交换器Exchanger使用详解

    Java开发JUC交换器Exchanger使用详解

    这篇文章主要为大家介绍了Java开发JUC交换器Exchanger使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • SpringBoot快速搭建RESTful应用的流程步骤

    SpringBoot快速搭建RESTful应用的流程步骤

    在现代 Web 应用开发中,RESTful API 是一种流行的设计范式,Spring Boot 提供了一套简洁的注解和约定,使得开发者能够轻松地创建 RESTful 服务,本课程将通过一个简单的实例,展示如何使用SpringBoot快速搭建RESTful应用
    2025-07-07
  • Spring调用this导致事务失效的三种解决方案

    Spring调用this导致事务失效的三种解决方案

    在 Spring 事务管理 中,如果你在同一个类的方法内部使用 this.xxx() 调用另一个带 @Transactional 的方法,事务很可能会失效,这不是玄学,而是代理机制在背后打盹了,本文就给大家介绍如何解决this调用导致事务失效问题,需要的朋友可以参考下
    2026-02-02
  • Java代码发送post请求实现方式

    Java代码发送post请求实现方式

    本文介绍了使用Java发送POST请求的方法,包括引用工具类、设置访问地址、请求头和json请求体,最后使用工具类发送请求并返回结果
    2026-05-05
  • Spring Boot存在路径遍历漏洞CVE-2021-22118的问题解析

    Spring Boot存在路径遍历漏洞CVE-2021-22118的问题解析

    CVE-2021-22118 是一个在 Spring Boot 中发现的漏洞,该漏洞关系到 Spring Boot 的开发者工具(Devtools)中的远程更新(Remote Update)功能,这篇文章主要介绍了Spring Boot存在路径遍历漏洞CVE-2021-22118,需要的朋友可以参考下
    2023-09-09
  • SpringBoot利用validation实现数据校验完整指南

    SpringBoot利用validation实现数据校验完整指南

    Spring Boot 提供的 Validation(基于 JSR 303/380 规范)让我们能通过注解的方式优雅地完成参数校验,极大地提升了开发效率和代码可读性,下面我们就来看看具体实现吧
    2025-09-09
  • SpringBoot配置开发环境的详细步骤(JDK、Maven、IDEA等)

    SpringBoot配置开发环境的详细步骤(JDK、Maven、IDEA等)

    文章介绍了如何配置SpringBoot开发环境,包括安装JDK、Maven和IDEA,并提供了详细的步骤和配置方法,感兴趣的朋友一起看看吧
    2024-12-12

最新评论