2012-05-30 70 views
-1
package keylogger; 

public class TestKeys { 
private static int i = 0; 
private native void setWinHook(); 
private native void unregisterWinHook(); 

public static void main(String args[]) { 

    TestKeys o = new TestKeys(); 

    System.loadLibrary("MyHook"); // load the library that registers the hook 

    Runnable r = new Runnable() { 
     @Override 
     public void run() { 
      System.out.println("After the call to System.loadLibrary"); 
     } 
    }; 
    new Thread(r,"new thread").start(); 
    } 
} 

當我啓動該程序時,dll被加載並且工作。但 new thread內的聲明未打印。這是爲什麼 ? 爲什麼java線程不啓動?該dll代碼不會立即返回。事實上,它無法返回。爲什麼java線程不啓動?

和:

是否當程序遇到聲明System.loadLibrary一個新的線程開始?

+0

請原諒downvote請: - || –

+0

也許您的「MyHook」庫的JNI_OnLoad函數阻止您到達Thread.start行。你檢查了嗎? – Jerome

+0

@Jerome根據[aix](http://stackoverflow.com/users/367273/aix)的答案,線程應該啓動。 –

回答

2

當程序遇到語句System.loadLibrary時是否啓動新的線程?

除非庫在其初始化部分創建一個。

P.S.如果您的線程join()行爲改變了嗎?

+0

那麼,在主線程上調用'dll'? –

+0

@SuhailGupta:已初始化,是的。 – NPE

+0

和'dll'將保持主線程直到它完成它的工作? –