2017-08-12 4 views
0

ここに私のコードです。私はJNAの外部ジャーをインポートしましたが、 "SPI INSTANCE =(SPI)Native.loadLibrary(" user32 "、SPI.class、new HashMap(){"のエラーを受け取ったので、コンパイルできません:エラー: "タイプのネイティブのメソッドのLoadLibrary(文字列、クラスマップ)は、引数には適用されません(文字列、クラス、新しいHashMapの(){})"Native.loadlibraryエラーを修正するには

package desktop; 
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") 

      //This is where the error starts: 
      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 
     ); 
    } 
} 
+0

方法のLoadLibrary(文字列、クラスマップ)(文字列、クラス、新規のHashMap <オブジェクト、オブジェクト>(){}) エラーメッセージ。これは私がタイプすることを意味したものです。私は混乱のためにお詫び申し上げます。 – Corbin

答えて

1

はこれを試してみてください:

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

答えは簡単です。メソッドの署名はcom.sun.jna.Native#loadLibrary(java.lang.String, java.lang.Class<T>, java.util.Map<java.lang.String,?>)です。

java.util.Map<java.lang.Object,java.lang.Object>インスタンスではなくjava.util.Map<java.lang.String,?>インスタンス。更新されたネイティブの引数に適用されないタイプで

+0

アドバイスをいただきありがとうございました!プログラムは今作動する!!! – Corbin

+0

@コルビン喜んでそれが役立ちます。あなたは私の答えを受け入れることができます。 \(^ o ^)/ – aristotll

関連する問題