J'écris un framework de test qui démarre une application graphique. Pour pouvoir tester cette interface graphique dans le cas d'une application SWT, je dois savoir que c'est l'affichage. En général, cet affichage est chargé par un autre classloader, donc j'utilise la méthode findDisplay (Thread t) de la classe swt Display par réflexion pour accomplir cette tâche. Mon code ressemble à ceci:Recherche de l'affichage d'une application RCP
Thread[] threads = new Thread[10];
Thread.enumerate(threads);
Object foundObject = null;
for (Thread t : Arrays.asList(threads)){
foundObject = null;
Class<?> clazz = t.getContextClassLoader().loadClass("org.eclipse.swt.widgets.Display");
final Method method = clazz.getMethod("findDisplay", Thread.class);
foundObject = method.invoke(null, new Object[] {t});
if (foundObject != null) {
System.out.println("yeah, found it!");
break;
}
}
À mon avis, ce devrait trouver tous les objets de type d'affichage dans le groupe de thread courant. Cependant, je n'en ai pas pour l'exemple de RCP texteditor bien que l'interface graphique démarre parfaitement.
Des idées sur ce qui ne va pas ou comment je peux déboguer cela d'une manière raisonnable?
Une raison particulière pour laquelle vous construisez un autre framework de test quand il y a beaucoup. là-bas? Des frameworks commerciaux sont disponibles, mais le projet SWTBot Eclipse est très bon et est disponible sous EPL. – user85259
En fait, le framework sur lequel je travaille est quelque chose en plus de abbot.swt, ce qui est comparable à SWTBot je pense. Mais le tout sera quelque chose "intégré" qui peut gérer de nombreux types d'applications différentes, pas seulement les applications SWT. Donc, je suis un peu limité sur la façon dont je démarre les applications sous test. – HerdplattenToni