سؤال

لدي تطبيق SWT يفتح نافذة OpenGL (باستخدام مكتبة LWJGL) بعد الضغط على زر. من المفترض أن تغلق نافذة SWT الرئيسية وافتح سياق OpenGL. يعمل بشكل جيد على Windows. على Mac ، أحصل على هذا الخطأ:

2010-03-05 02:28:25.315 java[1315:a07] [Java CocoaComponent compatibility mode]: Enabled
2010-03-05 02:28:25.316 java[1315:a07] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000
2010-03-05 02:28:25.317 java[1315:a07] Apple AWT Startup Exception : _createMenuRef called with existing principal MenuRef already associated with menu
2010-03-05 02:28:25.318 java[1315:a07] Apple AWT Restarting Native Event Thread

تغلق نافذة SWT ثم يتم تعليق التطبيق ، مع عدم وجود نوافذ مفتوحة.

يبدو أن تطبيق SWT لا يغلق بشكل نظيف ويترك إدخالات القائمة المرتبطة به ، مما يمنع نافذة LWJGL من الفتح. Mac OS X فقط يريد قائمة تطبيق واحدة. SWT لا تحررها قائمة خاصة بها وتريد LWJGL إضافة آخر.

حقائق:

  • من المفترض أن يغلق زر في مربع حوار SWT ويفتح نافذة LWJGL (org.lwjgl.opengl.display).

  • يقوم الزر بتعيين متغير ثابت في التطبيق لإخباره بما يجب القيام به بعد ذلك بعد إغلاق نافذة SWT ، لذلك لا يتم فتح نافذة LWJGL من رد اتصال SWT مباشرة.

  • الزر ثم يغلق نافذة SWT. لا أعرف الطريقة الصحيحة للقيام بذلك ، لكنني جربت مجموعات مختلفة من shell.close و shell.dispose و display.close و display.dispose ، لم يعمل أي منها. كلهم يغلقون النافذة لكن الخطأ يحدث في كل مرة.

هل يعرف أحد ما الذي يمكن القيام به لجعل هذا العمل؟

تحديث: هذا ببساطة لا يعمل ويبدو أن Apple لن تقوم بإصلاحها أبدًا. الطريقة الوحيدة حولها هي إطلاق مثيل تطبيق جديد وتمريره معلمة تخبرها بفتح النافذة الثانية.

تحديث 2: في هذه الحالة بالذات ، قمت بحل المشكلة باستخدام مربع حوار SWT لإصدار Windows من التطبيق ولإصدار Mac ، كتبت مربع حوار Cocoa الأصلي الذي يستدعي JVM وتشغيل تطبيق LWJGL عند الحاجة. هذا يعمل بشكل جيد.

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

المحلول

يبدو لي أن المشكلة ليست SWT إنشاء نافذة جديدة أو LWJGL القيام بذلك بالفعل. أعتقد أن المشكلة تكمن في حقيقة أنه بموجب MAC ، يجب تسجيل قائمة التطبيق في العملية ، ولسبب أو لآخر ، هناك تضارب في المصالح بين الاثنين.

قد يكون لديك بعض الحظ الأفضل في شعوذة قليلاً:

  • ماذا يحدث عند إنشاء نافذة LWJGL أولاً ، من ثم إنشاء قذيفة SWT؟
  • ماذا يحدث عند تهيئة LWJGL بشكل ثابت قبل إنشاء قذيفة SWT ، ثم تابع إنشاء Shell وإنشاء نافذة LWJGL؟

بالمناسبة ، لإغلاق نافذة SWT ، كل ما عليك فعله هو التخلص من Shell:

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