2014-09-22 34 views
1

我想使用JNA在Linux(Ubuntu 14)上檢測前臺應用程序。我跟着這個鏈接 Find out what application (window) is in focus in Java ,但我得到了以下錯誤:未找到JNA庫和本機庫錯誤

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'XLib': Native library (linux-x86-64/libXLib.so) not found in resource path ([file:/home/zzhou/workspace/home_prioritization_plus/bin/, file:/home/zzhou/Downloads/jna-4.1.0.jar, file:/home/zzhou/Downloads/jna-platform-4.1.0.jar]) 
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:271) 
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398) 
    at com.sun.jna.Library$Handler.<init>(Library.java:147) 
    at com.sun.jna.Native.loadLibrary(Native.java:412) 
    at com.sun.jna.Native.loadLibrary(Native.java:391) 
    at FunctionalityTest$XLib.<clinit>(FunctionalityTest.java:15) 
    at FunctionalityTest.main(FunctionalityTest.java:23) 

的代碼是:

import com.sun.jna.Native; 
import com.sun.jna.Platform; 
import com.sun.jna.Pointer; 
import com.sun.jna.platform.unix.X11; 
import com.sun.jna.win32.StdCallLibrary; 

public class FunctionalityTest { 

    static class Psapi { 
     static { Native.register("psapi"); } 
     public static native int GetModuleBaseNameW(Pointer hProcess, Pointer hmodule, char[] lpBaseName, int size); 
    } 

    public interface XLib extends StdCallLibrary { 
     XLib INSTANCE = (XLib) Native.loadLibrary("XLib", Psapi.class); // <-- PROBLEM 

     int XGetInputFocus(X11.Display display, X11.Window focus_return, Pointer revert_to_return); 
    } 

    public static void main(String args[]) { 
     if(Platform.isLinux()) { // Possibly most of the Unix systems will work here too, e.g. FreeBSD 
      final X11 x11 = X11.INSTANCE; 
      final XLib xlib= XLib.INSTANCE; 
      X11.Display display = x11.XOpenDisplay(null); 
      X11.Window window=new X11.Window(); 
      xlib.XGetInputFocus(display, window,Pointer.NULL); 
      X11.XTextProperty name=new X11.XTextProperty(); 
      x11.XGetWMName(display, window, name); 
      System.out.println(name.toString()); 
     } 
    } 

} 

要導入JNA庫,我下載JNA和JNA平臺從https://github.com/twall/jna和使用配置構建路徑...在Eclipse中添加庫。我沒有安裝任何東西。這可能是問題的根源嗎?

感謝您的幫助。

+1

是XLIB你的圖書館嗎?或者你的代碼期望它在系統上可用(然後可能需要安裝它)。大多數Linux發行版的大多數庫都位於'/ lib'或'/ usr/lib'中。 (com.sun.jna.win32。*也適用於Windows操作系統)。 – SnakeDoc 2014-09-22 16:29:26

+0

[從類路徑加載本機庫]的可能重複(http://stackoverflow.com/questions/23189776/load-native-library-from-class-path)。 – jww 2014-09-22 17:02:45

回答

1

Afaik,即使是JNA,您也必須使用Java加載庫,以便JNA找到它。 (測試win32的,而不是Linux)

試試這個略高於Native.loadLibrary

System.loadLibrary("XLib"); 
+0

也爲centos做了訣竅 – 2017-07-11 09:36:14