2010-04-30 3 views
2

У меня есть проект Java, который использует SWT-интерфейс, и у меня возникли проблемы с его развертыванием на любых компьютерах Mac OS X. Сама программа отлично работает в Windows, когда она запускается из Eclipse или из файла jar. На Mac, программа также отлично работает в Eclipse, но когда я пытаюсь запустить его из файла фляги, я получаю следующее сообщение об ошибке:Проблемы с SWT на 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) 
... 
... 
... 

Фактическая ошибка намного больше, и продолжается до аварий программы.

Я знаю, что использую правильный файл swt.jar, и я попытался запустить программу с аргументом -XstartOnFirstThread VM, но до сих пор не повезло.

Есть ли у кого-нибудь идеи или какие-либо предложения, в которых я мог бы начать поиск решения?

Спасибо.

+0

Первое, что я хотел бы сделать, это попробовать как Carbon, так и Cocoa версии Eclipse, и посмотреть, есть ли разница. –

+1

Какие версии Mac OS X, Java и Eclipse задействованы? – trashgod

ответ

0

У SWT нет коллекции мусора. Я предполагаю, что код, который вы используете, вызывает утечку памяти ОС, которая сообщается через консоль eclipse.

Мое подозрение подтверждается сообщением об ошибке, которое не является сообщением об ошибке Java, но вместо этого является сообщением об ошибке Obj-c.

вы можете прочитать об этом здесь .. http://www.eclipse.org/articles/swt-design-2/swt-design-2.html

и вот ссылка говорить об ошибке Obj-с вы на самом деле видите. http://www.idevgames.com/forum/archive/index.php/t-7710.html

удачи!

4

Является ли приложение комплектом или вы используете его из командной строки? Если в комплекте, вам нужно поместить ключ StartOnMainThread со значением true в словарь Java файла Info.plist. Если не в комплекте, аргумент равен java -XstartOnFirstThread. Да, они разные, и да, это, к сожалению, раздражает.

+0

Это определенно то, что вы увидите, если параметр StartOnFirstThread не установлен в SWT в Mac OS X. –

+0

вы могли бы немного разобраться? У меня аналогичная ситуация, когда выполнение SWT завершается с использованием исключения SWTException с описанием: «Недопустимый доступ к нити». Я подозреваю, что это также может иметь какое-то отношение к основному потоку. – posdef

+0

Операции SWT на Mac должны всегда происходить в основном потоке, а также должны быть в том же потоке, который создал Дисплей. Это исключение звучит так, будто вы вызываете SWT из другого потока. –

Смежные вопросы