J'ai une application SWT qui ouvre une fenêtre OpenGL (en utilisant la bibliothèque LWJGL) après avoir appuyé sur un bouton. Il est supposé fermer sa fenêtre SWT principale et en ouvrir une nouvelle avec un contexte OpenGL. Fonctionne très bien sur Windows. Sur Mac, je reçois cette erreur:Ouverture d'une fenêtre LWJGL à partir d'une application SWT sur 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
La fenêtre SWT ferme puis se bloque app, sans fenêtres ouvertes.
Il semblerait que l'application SWT ne se ferme pas proprement et laisse ses entrées de menu associées, ce qui empêche l'ouverture de la fenêtre LWJGL. Mac OS X ne veut qu'un seul menu d'application. SWT ne libère pas son propre menu et LWJGL veut en ajouter un autre.
faits:
Un bouton dans la boîte de dialogue SWT est censé fermer la boîte de dialogue et d'ouvrir une fenêtre de LWJGL (org.lwjgl.opengl.Display). Le bouton définit une variable statique dans l'application pour lui indiquer la procédure à suivre après la fermeture de la fenêtre SWT, de sorte que la fenêtre LWJGL n'est pas ouverte directement à partir d'un rappel SWT.
Le bouton ferme ensuite la fenêtre SWT. Je ne connais pas la bonne façon de le faire mais j'ai essayé différentes combinaisons de shell.close, shell.dispose, display.close et display.dispose, aucune d'entre elles n'a fonctionné. Ils ferment tous la fenêtre mais l'erreur se produit à chaque fois.
Est-ce que quelqu'un sait ce qui pourrait être fait pour que cela fonctionne?
MISE À JOUR: Cela ne fonctionne tout simplement pas et il semble que Apple ne le résoudra jamais. Le seul moyen de contourner le problème est de lancer une nouvelle instance d'application et de lui transmettre un paramètre lui indiquant d'ouvrir la seconde fenêtre.
MISE À JOUR 2: Dans ce cas particulier, je résolu le problème en utilisant la boîte de dialogue de SWT pour la version Windows de l'application et pour la version Mac, j'ai écrit un natif de dialogue de cacao qui invoque la machine virtuelle Java et exécute le LWJGL application en cas de besoin. Cela fonctionne plutôt bien.
Vous avez raison sur le conflit d'intérêts.Cependant, je suis incapable d'initialiser statiquement LWJGL avant d'essayer d'ouvrir une fenêtre d'affichage LWJGL. Il y a un constructeur statique dans Sys mais cela ne fait rien de substantiel. –
Que se passe-t-il lorsque vous lancez une fenêtre LWJGL, puis une fenêtre SWT? –
Je suis curieux de savoir comment cela a fonctionné pour vous! –