Java inputevents не запускается в течение некоторого периода в Linux (проблема Java / Xorg ??) - PullRequest
0 голосов
/ 25 октября 2009

Я пишу 2D-игру на Java, и у меня проблема с тем, что события ввода (мышь, клавиатура) не запускаются, когда они должны. Работает как положено в win2k & xp.

Поскольку это игра, у меня есть основной цикл, который

  1. Объединяет входные события (различные слушатели заполняют буферизованное состояние)
  2. Продвижение сцены
  3. Отображает сцену
  4. Ожидает, если необходимо, чтобы поддерживать стабильную частоту кадров (сон)
  5. Перестановка буферов

Визуализация сцены довольно сильно забивает java2D - он использует BufferStrategy и интенсивно использует немасштабирующий вариант drawImage (). Частота кадров на данный момент искусственно заблокирована на скорости около 60 кадров в секунду.

Кажется, что есть задержка (до нескольких секунд, иногда) между любым происходящим событием мыши или клавиатуры и JVM, подхватывающим его - изначально я думал, что это может быть поток обработки события не получает достаточно времени (несмотря на сон кадровой частоты ) - Я проверил это, добавив пользовательское событие, содержащее маркер фрейма, и ожидая его в конце фрейма, но оно срабатывает, когда ожидается (- это следует делать только после того, как все другие предыдущие события сработали, что говорит о том, что это x -Windows-to-JDK проблема, в отличие от внутренней внутри JDK?)

Что особенно странно, так это то, что его можно смягчить, если java запускается с хорошим значением +19 (поэтому более низкий приоритет ...). Также кажется, что становится хуже, если у меня более густонаселенная сцена, показывающая, что Xorg (а не java) занимает около 80% процессорного времени, и я подозреваю, что это как-то связано ...

Я также пытался поработать с приоритетами потоков, но это не имеет никакого значения ...

Я полностью озадачен этим - кто-нибудь еще видел подобное поведение, и если да, то как вы это исправили? Я лаю не на том дереве ??

Я использую 1.6.0 OpenJDK и fedora 11.

Извиняюсь за многословие, и заранее спасибо!

1 Ответ

1 голос
/ 26 октября 2009

Я только что попытался повторно привязать Xorg к -19 (так что это в реальном времени), и проблема исчезла ...

Я предполагаю, что рендеринг Java с помощью множества растровых изображений через Xorg заставляет сам X перегружать процессор, поэтому планировщик будет наказан и не успеет обработать события? Нечетность.

...