我正在尝试使用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时都会说它没有安装。当我输入安装命令时,我被告知我已经有了最新版本。
这对我来说非常困惑。如果有人能帮助阐明这一点我会非常感激!
答案 0 :(得分:0)
当JNA查找你正在调用的函数时,它需要能够找到libX11.so *。在linux上,您可能需要设置LD_LIBRARY_PATH以包含X11库的路径。
(来自注释):必须使用LD_LIBRARY_PATH才能查找依赖库,但设置系统属性jna.library.path将允许您指示可以找到显式加载库的位置(即那些使用Native.loadLibrary加载的库) ())。