GUI アプリケーションを開始するテスト フレームワークを作成しています。SWT アプリケーションの場合にこの GUI をテストできるようにするには、それがディスプレイであることを知る必要があります。通常、この表示は別のクラスローダによってロードされるため、swt Display クラスのメソッド findDisplay(Thread t) をリフレクションによって使用して、このタスクを実行しています。私のコードは次のようになります。
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;
}
}
私の意見では、これにより、現在のスレッド グループ内のタイプ Display のすべてのオブジェクトが検出されるはずです。ただし、GUI は完全に起動していますが、texteditor RCP の例では何も得られません。
何がうまくいかないのか、またはこれを合理的な方法でデバッグする方法はありますか?