J'ai un classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 package be.manex.test; public class Processus { private int _pid; private String _name; public Processus(){ } public Processus(String name){ _name = name; } public Processus(int pid) { _pid = pid; } public Processus(String name, int pid) { _name = name; _pid = pid; } public String getName() { return _name; } public void setName(String name) { _name = name; } public int getPid() { return _pid; } public void setPid(int pid) { _pid = pid; } }
que j'aimerai instancie dans du JNI :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 jobject ProcessToJava(JNIEnv *env, TASK_LIST ps ){ int i = 0, size; char outbuf[MAX_PATH]; jobject result; jclass processClass; jmethodID cid; processClass = (*env)->FindClass(env, "Lbe/manex/test/Processus;"); if(processClass == NULL){ return NULL; } cid = (*env)->GetMethodID(env, processClass, "<init>", "([C)V"); if(cid == NULL) return NULL; result = (*env)->NewObject(env, processClass, cid); }
Mais j'ai :
Or, j'ai suivi ( en modifiant un peu certes ) un truc dans un livre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Exception in thread "main" java.lang.NoSuchMethodError: <init> at ProcessHelper.getFirstProcessus(Native Method) at ProcessHelper.main(ProcessHelper.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Le constructeur est bien "<init>" non ?
Partager