2014-09-22 2 views
1

Linux (Ubuntu 14)에서 전경 응용 프로그램을 감지하기 위해 JNA를 사용하고 싶습니다. 나는이 링크 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 라이브러리를 가져 오려면, 나는 https://github.com/twall/jna에서 JNA와 JNA 플랫폼을 다운로드 및 구성 빌드 사용 경로 ... 이클립스에서 라이브러리를 추가합니다. 나는 아무것도 설치하지 않았다. 그것이 문제의 근원이 될 수 있습니까?

도움 주셔서 감사합니다.

+1

는 Xlib를이 라이브러리입니까? 또는 코드가 시스템에서 사용 가능할 것으로 기대하고 있습니다 (설치해야 할 수도 있음). 대부분의 리눅스 배포판에있는 대부분의 libs는'/ lib' 또는'/ usr/lib'에 있습니다. (com.sun.jna.win32. *는 Windows OS 용입니다.) – SnakeDoc

+0

[클래스 경로에서 네이티브 라이브러리로드] (http://stackoverflow.com/questions/23189776/load-native-library-from-class-path)의 가능한 복제본입니다. – jww

답변

1

Afaik, JNA의 경우에도 JNA에서 찾을 수 있도록 Java로 라이브러리를로드해야합니다. (Win32에서가 아닌 리눅스 테스트)

Native.loadLibrary 이상이 시도 :

System.loadLibrary("XLib"); 
+0

도 centos를위한 속임수를했다. –