Javaコードでメソッドを取得しようとしましjMethodID
たが、この特定の関数を呼び出すと、例外がスローされます:
Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: displayKeyStrokes
at org.suhail.keylogger.HelperClasses.NativeMethods.initializeJNIVars(Native Method)
at org.suhail.keylogger.GUI.MainGUI.jMenuItem1ActionPerformed(MainGUI.java:356)
.
.
.
この理由がわかりません。以下は、Java メソッドから呼び出されるCコード スニペットです。
void Java_org_suhail_keylogger_HelperClasses_NativeMethods_initializeJNIVars
(JNIEnv *env, jobject obj) {
jclass cls = (*env)->GetObjectClass(env,obj);
callBackToDeliverKeyStroke = (*env)->GetMethodID(env,cls,"displayKeyStrokes","()V");
object = (*env)->NewGlobalRef(env,obj);
if(object == NULL | callBackToDeliverKeyStroke == NULL | cls == NULL) {
printf("Initialization error...One of the variable is Null\n");
}
}
そして、これはdisplayKeyStrokes
Javaコードで名前が付けられたメソッドです:
public void displayKeyStrokes() {
System.out.println("Java Message : A Key has been pressed");
}
例外が発生する理由は何ですか?
編集 :
JNI コードを呼び出す Java コード:
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1.setEnabled(false);
jMenuItem2.setEnabled(true);
try {
System.loadLibrary("Dll_PKeylogger"); // Load the dll written to listen to the tapping of keys
nativeMethods.initializeJNIVars(); // CALL
}catch(Exception exc) {
exc.printStackTrace();
}
}
NativeMethods クラス(ネイティブ メソッドを宣言します)
package org.suhail.keylogger.HelperClasses;
public class NativeMethods {
public native void initializeJNIVars();
public native void unregisterHook();
}
注 :initializeJNIVars
名前付きの別のクラスのオブジェクトでメソッドを呼び出しており、次のようにイベントが発生するたびに、匿名の内部クラスからNativeMethods
メソッドjMenuItem1ActionPerformed
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});