Сбой JaamSim при запуске в Eclipse

#java #eclipse #maven #nsexception

#java #eclipse #maven #исключение nsexception

Вопрос:

Я действительно новичок в этом и пытаюсь запустить инструмент JaamSim в Eclipse для запуска моделирования для моей дипломной работы бакалавра.

Когда я когда-либо пытаюсь запустить конфигурацию, я получаю libc abi.dylib: завершение с неперехваченным исключением типа NSException. Окно загрузки JaamSim всегда открывается на короткое время, а затем снова закрывается с пометкой «Графический фрейм был неожиданно закрыт»

Я пробовал несколько дней, и у меня закончились идеи … установил новейший jdk от adoptopenjdk, а также apache ant и maven. Также связал все внутри .bash_profile

Я был бы очень признателен, если бы кто-нибудь мог подсказать мне решение.Я добавил сюда форму журнала терминала eclipse 1

Кстати, я на Mac, если это поможет

Комментарии:

1. Привет, добро пожаловать, расскажите нам, где вы взяли код — это просто стандартная демо-версия, которую вы пытаетесь запустить?

2. Это форма моего университета, так что это базовый материал JaamSim плюс некоторые конфигурации, которые они сделали

Ответ №1:

«Исключение», с которым вы сталкиваетесь, не является исключением Java. Это собственное исключение Objective-C. NSException. «NS» означает NeXTSTEP. Это шибболет старой ОС NeXTSTEP, которая является предком OS X и macOS. Я могу понять ваше замешательство, потому что и Objective-C, и Java используют термин «исключение».

Опубликованные вами журналы также являются не трассировкой стека Java, а дампом потока на основе NSLog из собственных фреймворков, от которых зависит ваша графика Java. Вы вырезали текст фактического исключения в изображении, которое вы связали. Я предполагаю, что вы не распознали формат и поэтому не увидели полезного сообщения.

Я собираюсь предположить, что полный текст сообщения NSException был «Области перетаскивания NSWindow должны быть признаны недействительными только в основном потоке!« Если это так, то я думаю, что ваша проблема, вероятно, вызвана изменением некоторой графики из фонового потока.

Системная графика, такая как windows, оповещения и т. Д., Управляется в macOS с помощью фреймворка под названием «Cocoa». NSWindow — это объект Cocoa. Одно из важных правил Cocoa (и большинства фреймворков пользовательского интерфейса) заключается в том, что вы должны изменять объекты Cocoa (например, NSWindow) только из основного потока. Вероятно, вы вносите некоторые изменения в свой графический интерфейс (в частности, аннулируете области перетаскивания) из фонового потока. У Java нет никаких внутренних проблем с этим, но у Cocoa есть. Таким образом, вы получаете встроенную ошибку вместо ошибки Java.

TL; DR: работайте только с вашим графическим интерфейсом из основного потока. Вы получаете эту ошибку, потому что вы меняете графический интерфейс из фонового потока.

РЕДАКТИРОВАТЬ: после небольшого исследования.

Похоже, что эта конкретная проблема возникает с некоторыми библиотеками Java OpenGL, в частности с lwjgl. Здесь вы можете увидеть очень решительные, но в конечном итоге бесплодные усилия по устранению проблемы. Я не уверен, какой интерфейс OpenGL Java используется в JaamSim, но они задокументировали эту же проблему еще в 2018 году, заявив

Ошибка оказывается известной проблемой с программным обеспечением JOGL, которое мы используем для 3D-графики. К сожалению, для исправления потребуется некоторое время.

Та же ошибка JOGL была снова задокументирована в 2019 году. Там, похоже, это решено. Их отчет об исправлении был

полностью инкапсулировал обе конструкции для запуска в основном потоке

Я не уверен, насколько хорошо вы это контролируете. Лучше всего начать с добавления -XstartOnFirstThread флага в вашу команду Java. Я бы также проверил, смог ли кто-нибудь из вашего класса выполнить эту работу на Mac. Иногда полезно выполнить быструю проверку невозможности, прежде чем тратить время.

Комментарии:

1. спасибо за ответ! На картинке было все из терминала eclipse, но в отчете о сбое указано: «Области перетаскивания NSWindow должны быть признаны недействительными только в основном потоке!» Могу ли я что-нибудь сделать с этой проблемой на моем системном сайте? Или проблема вызвана кодом? Еще раз извините за мои глупые вопросы, которые действительно потеряли atm… Может быть, эта картинка отчета о сбое помогает? i.stack.imgur.com/z3raT.png

2. @MF1893 я добавил к ответу все, что мог. Я бы настоятельно рекомендовал попробовать -XstartOnFirstThread флаг, а также проверить, выполнял ли кто-нибудь эту работу на Mac. Если это ошибка глубоко внутри JaamSim, вам может потребоваться запустить ее на другой машине.

3. Привет, еще раз спасибо. Я обнаружил ту же ошибку JOGL, но, к сожалению, это мне не помогло. О -XstartOnFirstThread я правильно понимаю, что я должен добавить его в аргументы виртуальной машины? Потому что, если это так, я предполагаю, что это уже происходит с предустановленным тиком i.stack.imgur.com/b9bgg.jpg

4. @MF1893 Думаю, тогда я бы просто убедился, что вы запускаете с помощью SWT. Мне очень любопытно узнать, каково разрешение. Поэтому был бы признателен, если бы вы вернули сообщение сюда, когда найдете его.

5. К сожалению, я не нашел проблемы, поэтому переключился на Windows, где она работает нормально. Похоже, это проблема Mac, поскольку она также не работает на Parallels, но в чистой части Windows это так. Однако это может помочь в будущем groups.google.com/g/jaamsim-users/c/JGqmj9CRXcU