2010-04-30 6 views
2

J'ai un projet Java qui utilise une interface utilisateur SWT et j'ai du mal à le déployer sur n'importe quel ordinateur Mac OS X. Le programme lui-même fonctionne parfaitement sur Windows lorsqu'il est exécuté depuis Eclipse ou depuis un fichier jar. Sur Mac, le programme fonctionne aussi bien dans Eclipse, mais lorsque je tente de l'exécuter à partir d'un fichier jar, je reçois l'erreur suivante:Problèmes avec SWT sur Mac

2010-04-30 13:33:04.564 java[17825:41b] *** _NSAutoreleaseNoPool(): Object 0x10b9b0 of class NSCFString autoreleased with no pool in place - just leaking 
Stack: (0x944acf4f 0x943b9432 0x678fb79 0x35a19b1 0x359ba7f) 
2010-04-30 13:33:04.566 java[17825:41b] *** _NSAutoreleaseNoPool(): Object 0x115ef0 of class NSCFNumber autoreleased with no pool in place - just leaking 
Stack: (0x944acf4f 0x943b9432 0x678a0b0 0x35a19b1 0x359ba7f) 
2010-04-30 13:33:04.567 java[17825:41b] *** _NSAutoreleaseNoPool(): Object 0x121000 of class NSCFString autoreleased with no pool in place - just leaking 
Stack: (0x944acf4f 0x943b9432 0x678fb79 0x35a19b1) 
2010-04-30 13:33:04.581 java[17825:41b] *** _NSAutoreleaseNoPool(): Object 0x123720 of class NSPathStore2 autoreleased with no pool in place - just leaking 
Stack: (0x944acf4f 0x943ba637 0x943c238f 0x943c1e8e 0x943c694b 0x678992e 0x35a19b1) 
2010-04-30 13:33:04.582 java[17825:41b] *** _NSAutoreleaseNoPool(): Object 0x12d660 of class NSPathStore2 autoreleased with no pool in place - just leaking 
Stack: (0x944acf4f 0x943ba637 0x943b9739 0x943c3eb2 0x943c6b22 0x678992e 0x35a19b1) 
... 
... 
... 

L'erreur réelle est beaucoup plus grande, et continue jusqu'à ce que le programme se bloque.

Je sais que j'utilise le bon fichier swt.jar et j'ai essayé d'exécuter le programme avec l'argument -XstartOnFirstThread VM, mais je n'ai toujours pas eu de chance.

Est-ce que quelqu'un a des idées ou des suggestions où je pourrais commencer à chercher une solution?

Merci.

+0

La première chose que je ferais, est d'essayer les versions Carbon et Cocoa d'Eclipse, et voir s'il y a une différence. –

+1

Quelles sont les versions de Mac OS X, Java et Eclipse impliquées? – trashgod

Répondre

0

SWT ne dispose pas de garbage collection .. Je suppose que le code que vous exécutez provoque une fuite de mémoire de système d'exploitation qui est signalée par le biais de la console Eclipse.

Ma suspicion est confirmée par le message d'erreur n'étant pas un message d'erreur Java, mais un message d'erreur Obj-c à la place.

vous pouvez en lire davantage ici .. http://www.eclipse.org/articles/swt-design-2/swt-design-2.html

et voici un lien à parler de l'erreur Obj-c vous voyez réellement. http://www.idevgames.com/forum/archive/index.php/t-7710.html

bonne chance!

4

L'application est-elle intégrée ou l'exécutez-vous à partir de la ligne de commande? Si regroupé, vous devez placer la clé StartOnMainThread avec la valeur true dans le dictionnaire Java du fichier Info.plist. Si ce n'est pas le cas, l'argument est java -XstartOnFirstThread. Oui, ils sont différents, et oui, c'est malheureusement ennuyeux.

+0

C'est certainement ce que vous verrez si l'option StartOnFirstThread n'est pas définie dans SWT sous Mac OS X. –

+0

pourriez-vous élaborer un peu? J'ai une situation similaire, où l'exécution SWT échoue avec une SWTException avec la description: "Invalid Thread Access". Je soupçonne qu'il pourrait aussi avoir quelque chose à voir avec le fil principal – posdef

+0

Les opérations SWT sur le Mac doivent toujours se produire sur le thread principal, et doivent également être sur le même fil que celui qui a créé l'affichage. Cette exception sonne comme si vous appeliez le SWT à partir d'un thread différent. –

Questions connexes