Bonjour,

J'utilise la librairie jna pour récupérer les noms des fenetres sous windows mais j'ai du mal à comprendre un bout de code :

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
 
public class JNA_Main {
    // Equivalent JNA mappings
    public interface User32 extends StdCallLibrary {
        User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
 
        interface WNDENUMPROC extends StdCallCallback {
            boolean callback(Pointer hWnd, Pointer arg);
        }
 
        boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer arg);
    }
 
    public static void main(String[] args) {
        final User32 user32 = User32.INSTANCE;
 
        user32.EnumWindows(new User32.WNDENUMPROC() {
               return true;
            }
        }, null);
    }
}
Le code suivant marche mais dès que je compartimente le code en créant une classe Main et une classe interface (User32), je plante à la première ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Exception in thread "main" java.lang.ExceptionInInitializerError
	at Win32Main.main(Win32Main.java:11)
Caused by: java.lang.ClassCastException: $Proxy0 cannot be cast to com.sun.jna.Library
	at com.sun.jna.Native.loadLibrary(Native.java:382)
	at com.sun.jna.Native.loadLibrary(Native.java:364)
	at User32.<clinit>(User32.java:8)
	... 1 more
On est obligé de déclarer l'interface jna dans le main ? N'y a t-il pas une solution pour ne pas avoir tout le code dans une même classe?