LockDisplay:使用JNA锁定显示时无法加载X11

时间:2011-10-04 12:31:53

标签: java linux x11 jna

我正在尝试使用X11到JNA锁定Java中的显示(禁止用户使用键盘和鼠标)。

但是,当我尝试在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 :(得分:0)

当JNA查找你正在调用的函数时,它需要能够找到libX11.so *。在linux上,您可能需要设置LD_LIBRARY_PATH以包含X11库的路径。

(来自注释):必须使用LD_LIBRARY_PATH才能查找依赖库,但设置系统属性jna.library.path将允许您指示可以找到显式加载库的位置(即那些使用Native.loadLibrary加载的库) ())。