前言

今天去必应搜东西的时候,看到必应的壁纸又换了,顿时心下羡慕,有一个想法忽然冒出来:为啥我不能拥有这么多的壁纸呢?


分析过程

我去看了看win10的壁纸切换栏,如果想要动态切换壁纸的时候,有这么一个图片切换频率,但是图片只能从自己电脑的文件夹获取

下一步就非常清晰明了了,只要我拥有足够多的图片源,那么就可以随意切换了


接口

程序员就要有程序员的想法,我去网上搜了搜必应的图片接口
https://api.xygeng.cn/Bing/

代码实现

这个是一个maven项目

代码很简单,我相信各位都看得懂

package com.howling;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Calendar;

public class Photo {
    public static void main(String[] args) throws Exception {

        //线程礼让两分钟,可以随意修改
        Thread.sleep((long) (2 * 60 * 1000));

        //获得年月日
        Calendar calendar = Calendar.getInstance();
        int year, month, day;
        year = calendar.get(Calendar.YEAR);
        month = calendar.get(Calendar.MONTH) + 1;
        day = calendar.get(Calendar.DAY_OF_MONTH);

        //必应接口
        String url = "https://api.xygeng.cn/Bing/";

        URL imageURL = new URL(url);

        //打开连接
        URLConnection connection = imageURL.openConnection();

        //设置连接主机超时时间
        connection.setConnectTimeout(5 * 1000);
        //设置读取超时时间
        connection.setReadTimeout(5 * 1000);

        //获取输入流
        InputStream stream = connection.getInputStream();

        byte[] bytes = new byte[1024];

        int len;

        //定义存储路径位置,各位可以随意修改
        File saveFile = new File("C:\\Users\\user\\Pictures\\Win10壁纸");

        if (!saveFile.exists()) saveFile.mkdirs();

        //设置输出位置,输出的名字就是当前年月日,比如今天:20200706
        FileOutputStream outputStream = new FileOutputStream(saveFile.getPath() + "\\" + year + month + day + ".jpg");

        while ((len = stream.read(bytes)) != -1) outputStream.write(bytes, 0, len);

        //关闭
        outputStream.close();
        stream.close();

    }
}
==关于线程礼让==

注意这里有一个线程礼让的部分,原本的话我是没有加入这个东西的

但是后来电脑重启之后我检查了一下,因为电脑还没来得及联网,报错了java.net.UnknownHostException

我找了半天的解决方法也没解决这个问题,最后没办法只能礼让两分钟,等电脑自动联网再说

一开始还不是两分钟,是三十秒,后来又试了一次,又报错了,那没办法,只能设置成了两分钟

各位这里也可以随意修改

==关于图片名字==

一开始我打算的是使用UUID来获取唯一值

但是因为之后这里设置的是每次电脑开机之后就会自动执行这个代码

假如一天之内重启多次电脑,那么就有很多重复的图片,所以干脆使用日期命名

这样即使一天重启了电脑,也会替换掉原来的图片

第二天,必应的图片就换掉了,那也就不存在问题了

Jar包

打为jar包,这个需要在pom.xml文件下加入以下部分来打为jar包

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.howling.Photo</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
因为我没有用到任何的外部依赖,所以这样做是没有问题的

如果你要改变main函数,只需要改动mainClass即可

别忘记在pom.xml中改为jar类型:<packaging>jar</packaging>

pom文件加完之后,直接点击maven中的package即可

打包完成之后在target目录下可以看到打出来的jar包

假如找不到target是因为没有点击

Jar转EXE

工具

我们需要开机自动执行这段代码,据我了解有那么几种方式:

  1. bat
  2. exe

我们选择exe的方式,所以需要将jar包转为exe,需要一个工具:exe4j

官方下载地址:https://exe4j.apponic.com/dow...

安装之后是这么个界面:


Jar转EXE

  1. next

  2. 选择jar转exe

  3. 起名和选择输出路径

  4. 选择64/32位

    我相信各位大部分都是64位

  5. 给app起名字

    这一步貌似应该放到第四步。。

  6. 选择jar包

  7. 选择main函数并点击下一步

  8. 选择你的jre版本

  9. 一直下一步,直到导出exe文件

开机启动

不管使用哪种方式,都需要开机启动,打开命令行,输入shell:startup

把exe文件放进去,当电脑开机后会自动执行


重启电脑一次看看吧,文件夹内是不是多了图片

Windows设置

image-20200706191012522

这里是win10设置,其他版本的我这里没有,自行摸索吧

嚎羸
1 声望1 粉丝

一只Java菜鸡