سؤال

وأنا أكتب إطار الاختبار الذي بدء تطبيق واجهة المستخدم الرسومية. لتكون قادرة على اختبار هذه GUI في حالة تطبيق سبحانه وتعالى أريد أن أعرف انها العرض. بشكل عام، يتم تحميل هذا العرض من قبل classloader آخر، لذلك أنا باستخدام findDisplay طريقة (ر الموضوع) من الدرجة سبحانه وتعالى العرض عن طريق التأمل لإنجاز هذه المهمة. قانون بلدي يبدو شيئا من هذا القبيل:

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;
    }
}

في رأيي هذا أن تجد كل كائن من نوع العرض في المجموعة موضوع الحالية. ولكن أنا لا تحصل على أي لالمثال محرر نصوص الحزب الشيوعي الثوري على الرغم من أن واجهة المستخدم الرسومية هو البدء تماما.

وأي أفكار ما يحدث خطأ أو كيف يمكن تصحيح هذا بطريقة معقولة؟

هل كانت مفيدة؟

المحلول

وأنا أحسب ما هي المشكلة الرئيسية: كان للContextClassloader علاقة مع classloader الذين تحميلها فعلا الطبقات شيئا.

للحل مشكلتي أخذت الرعاية من وجود classloader الذي يحمل الدرجة عرض سبحانه وتعالى سواء في التسلسل الهرمي للبرنامج الحزب الشيوعي الثوري والتسلسل الهرمي للإطار بلدي. وكان هذا ممكنا باستخدام classloader تمديد جافا. (لم أتمكن من استخدام classloader تطبيق منذ لا تعمل طلبي RCP مع أنها الأم، وأنا لم ترد حتى الآن لماذا) ثم كان مجرد مسألة إضافة swt.jar إلى java.ext.dirs الممتلكات.

نصائح أخرى

إذا كنت تستخدم الكسوف RCP ثم ربما يمكنك استخدام:

<اقتباس فقرة>   

وPlatformUI.getWorkbench (). getDisplay ()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top