用Java更改Windows 10壁纸

用Java更改Windows 10壁纸,java,windows,jna,wallpaper,Java,Windows,Jna,Wallpaper,我想用Java更改我的Windows壁纸,并在网上搜索解决方案 import java.util.HashMap; 导入com.sun.jna.Native; 导入com.sun.jna.platform.win32.WinDef.UINT\u PTR; 导入com.sun.jna.win32。*; 公共类壁纸转换器{ 公共静态void main(字符串[]args){ //提供您自己的路径,而不是使用此路径 String path=“D:\\stone.png”; SPI.INSTANCE.S

我想用Java更改我的Windows壁纸,并在网上搜索解决方案

import java.util.HashMap;
导入com.sun.jna.Native;
导入com.sun.jna.platform.win32.WinDef.UINT\u PTR;
导入com.sun.jna.win32。*;
公共类壁纸转换器{
公共静态void main(字符串[]args){
//提供您自己的路径,而不是使用此路径
String path=“D:\\stone.png”;
SPI.INSTANCE.SystemParametersInfo(
新UINT_PTR(SPI.SPI_Setdesk壁纸),
新UINT_PTR(0),
路径
新UINT_PTR(SPI.SPIF_UPDATEINIFILE | SPI.SPIF_sendwinichange));
}
公共接口SPI扩展StdCallLibrary{
//来自MSDN文章
长SPI_SETDESKWALLPAPER=20;
长SPIF_UpdateInFile=0x01;
长SPIF_sendwinichange=0x02;
@抑制警告(“串行”)
SPI实例=(SPI)Native.loadLibrary(“user32”,SPI.class,new HashMap()){
{
put(选项类型映射器,w32 pitypemapper.UNICODE);
put(选项函数映射器,W32APIFunctionMapper.UNICODE);
}
});
布尔系统参数信息(
行动,
UINT_PTR uiParam,
字符串pvParam,
乌恩图夫维尼尼酒店
);
}
}
但这对我不起作用,我得到了这个错误:

线程“main”java.lang.NoSuchMethodError中出现异常:com.sun.jna.IntegerType.(IJZ)V 位于com.sun.jna.platform.win32.WinDef$UINT_PTR(WinDef.java:566) 位于de.dogyman.bc.main.wallparchanger.main(wallparchanger.java:15)

我以前从未使用过JNA,也不知道代码到底做了什么,所以我不知道错误来自哪里

我将这些JAR导入我的构建路径:


我希望有人能帮我找到解决方案,或者给我另一种用Java更改墙纸的方法。

您使用的是不兼容的
jna.jar
jna platform.jar
。您可以在

下载这些jar的最新版本,删除groovy标记,因为这看起来与groovy无关。您应该扩展
platform.jar中提供的
User32
库,并以相同的方式初始化映射(假设映射中不存在您需要的方法)。
import java.util.HashMap;

import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.UINT_PTR;
import com.sun.jna.win32.*;

public class WallpaperChanger {
   public static void main(String[] args) {
      //supply your own path instead of using this one
      String path = "D:\\stone.png";

      SPI.INSTANCE.SystemParametersInfo(
          new UINT_PTR(SPI.SPI_SETDESKWALLPAPER), 
          new UINT_PTR(0), 
          path, 
          new UINT_PTR(SPI.SPIF_UPDATEINIFILE | SPI.SPIF_SENDWININICHANGE));
   }

   public interface SPI extends StdCallLibrary {

      //from MSDN article
      long SPI_SETDESKWALLPAPER = 20;
      long SPIF_UPDATEINIFILE = 0x01;
      long SPIF_SENDWININICHANGE = 0x02;

      @SuppressWarnings("serial")
      SPI INSTANCE = (SPI) Native.loadLibrary("user32", SPI.class, new HashMap<Object, Object>() {
         {
            put(OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE);
            put(OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE);
         }
      });

      boolean SystemParametersInfo(
          UINT_PTR uiAction,
          UINT_PTR uiParam,
          String pvParam,
          UINT_PTR fWinIni
        );
    }
}