NoSuchMethodError с использованием карты платформы JNA User32 - PullRequest
0 голосов
/ 09 ноября 2018

При первой попытке использования User32.Instance я получил следующую ошибку:

Исключение в потоке "main". Библиотека;
на com.sun.jna.platform.win32.User32. (User32.java:48)

при попытке запустить предопределенное отображение JNA функций класса Windows User32.

Я попытался запустить следующий код:

HWND hwnd = User32.INSTANCE.FindWindow(null,"new 2 - Notepad++");
User32.INSTANCE.SetForegroundWindow(hwnd);

Должен ли я объявить свой собственный интерфейс или я могу использовать сопоставление JNA User32, расположенное на платформе jna? Что я делаю не так?

Редактировать: ошибка в этой строке от com.sun.jna.platform.win32.user32:

User32 INSTANCE = Native.load("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS);

1 Ответ

0 голосов
/ 10 ноября 2018

Мне удалось воспроизвести эту ошибку, скомпилировав старый пакет jna (до 5.0.0) и новый пакет jna-platform (5.0.0):

Exception in thread "main" java.lang.NoSuchMethodError: com.sun.jna.Native.load(Ljava/lang/String;Ljava/lang/Class;Ljava/util/Map;)Lcom/sun/jna/Library;
    at com.sun.jna.platform.win32.User32.<clinit>(User32.java:48)
    at sandboxjava.Main.main(Main.java:8)

Проблема в том, что JNA устарела в методе Native.loadLibrary в версии 5.0.0 и ввела метод Native.load. Более новый пакет jna-platform использует новый метод, но поскольку пакет jna является более старой версией, метод load просто не существует в пакете.

Вам следует либо обновить пакет jna до 5.0.0 (последний на момент написания), либо понизить jna-platform до версии до 5.0.0.

...