Хотя моя игра на основе Lwjgl3Application
отлично работает в Windows и различных дистрибутивах Linux, на macOS у меня появляется только черный экран. Похоже, вызов glfwPollEvents
вообще не возвращает результат, что блокирует основной цикл (см. stacktrace).
Я попытался предоставить минимальный пример, но проблема не возникает в новом проекте libGDX, использующем те же версии.
Stacktrace (приложение не вылетает, но зависает):
invokeV:-1, JNI (org.lwjgl.system)
glfwPollEvents:3438, GLFW (org.lwjgl.glfw)
loop:199, Lwjgl3Application (com.badlogic.gdx.backends.lwjgl3)
<init>:167, Lwjgl3Application (com.badlogic.gdx.backends.lwjgl3)
main:43, DesktopLauncher
Версии:
Редактировать:
-XstartOnFirstThread
, чтобы запустить его, чтобы он работал в основном потоке.Toolkit.getDefaultToolkit().systemClipboard
не вызывается ни в проекте, ни что-либо еще для java.awt или подобногоКроме того, вы вызывали Toolkit.getDefaultToolkit().systemClipboard где-то до этого? Иногда на Mac с libgdx, когда вы вызываете его, зависают события следующего опроса.
спасибо, что спросили. В macOS для запуска мне нужно использовать аргумент командной строки -XstartOnFirstThread. Я адаптирую вопрос, так как это может быть важно
Я не могу найти Toolkit.getDefaultToolkit().systemClipboard нигде в своем коде. Но я проведу расследование, если одна из библиотек каким-то образом позвонит.
Попробуйте посмотреть звонки из этой библиотеки/района. Иногда один из этих вызовов может заблокировать следующее событие опроса. Я видел это слишком много раз.
Хорошо, я удалил части приложения одну за другой и смог свести его к TexturePacker
, который я запускал специально (только для целей разработки) в своем DesktopLauncher
перед запуском игры. Пропуск этого шага решает проблему.
Я еще не отладил его достаточно глубоко, чтобы найти точное место в TexturePacker
, вызывающее проблему, но я видел, что он использует пакет java.awt
, который также предоставляет проблемный Toolkit.systemClipboard
, упомянутый ALUFTW.
(Что касается голосов «за» и «против» по этому вопросу. Я согласен, что для решения проблемы недостаточно информации, но, возможно, вопрос и мой ответ помогут кому-то решить подобные проблемы в будущем, поэтому я решил не удалять его. )
Вы звоните из основного потока?