LockDisplay: невозможно загрузить X11 при использовании JNA для блокировки дисплея - PullRequest
0 голосов
/ 04 октября 2011

Я пытаюсь заблокировать отображение (не позволяя пользователю использовать клавиатуру и мышь) в Java, используя X11 через JNA.

Однако, когда я пытаюсь запустить приложение в Windows, я получаю эту ошибку:

java.lang.UnsatisfiedLinkError: Unable to load library 'X11': com.sun.jna.Native.open(Ljava/lang/String;)J
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:166)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:239)
    at com.sun.jna.Library$Handler.<init>(Library.java:140)
    at com.sun.jna.Native.loadLibrary(Native.java:393)
    at com.sun.jna.Native.loadLibrary(Native.java:378)
    at com.sun.jna.platform.unix.X11.<clinit>(X11.java:347)
    at octostar.LinuxHelper.blockInput(LinuxHelper.java:77)
    at .... ....

Мой код такой (входной параметр - логический «блок»):

        boolean returnVal = true;
        X11.Display dpy = null;
        final X11 x11 = X11.INSTANCE;
        final Xss xss = Xss.INSTANCE;

        try {
            dpy = x11.XOpenDisplay(null);
            if (block)
                xss.XLockDisplay(dpy);
            else
                xss.XUnlockDisplay(dpy);

        } catch (Exception ex){
            returnVal = false;
        } finally {
            if (dpy != null)
                    x11.XCloseDisplay(dpy);
            dpy = null;
        }

        return returnVal;

Ошибка возникает в X11.INSTANCE (это строка octostar.LinuxHelper.blockInput (LinuxHelper.java:77) как в сообщении об ошибке выше)

В другой части моего кода я получаю эту ошибку:

java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.platform.unix.X11
    at octostar.LinuxHelper.getIdleTimeMillis(LinuxHelper.java:50)

Я попытался набрать X11 в терминале,и они сказали мне сделать установку, которую я сделал после этого, но каждый последующий раз, когда я печатаю X11, он говорит, что он не установлен.Когда я набираю команду установки, мне говорят, что у меня уже установлена ​​последняя версия.

Это все очень смущает меня.Если бы кто-нибудь мог помочь пролить свет на это, я был бы очень признателен!

1 Ответ

0 голосов
/ 04 октября 2011

JNA должна быть в состоянии найти libX11.so * при поиске вызываемых вами функций. В Linux вам может понадобиться установить LD_LIBRARY_PATH, чтобы включить путь к библиотекам X11.

(из комментариев): LD_LIBRARY_PATH должен использоваться для поиска зависимых библиотек, но установка системного свойства jna.library.path позволит вам указать, где можно найти явно загруженные библиотеки (т. Е. Библиотеки, загруженные с помощью Native.loadLibrary ()).

...