Подтвердить что ты не робот

SWT Нет больше ручек

Windows XP имеет ограничение на 10000 пользовательских дескрипторов для каждого процесса и общее 32000 для каждого сеанса рабочего стола. Однако, когда я запускаю 4 или 5 SWT-процессов, каждый из которых потребляет не более 2000 пользовательских дескрипторов, исключение SWT No More обрабатывает всегда.

Кто-нибудь знает, почему?

4b9b3361

Ответ 1

Если я вас правильно понимаю, вы, вероятно, получаете следующее исключение:

org.eclipse.swt.SWTError: No more handles

Возможно, вы создаете ресурсы (такие как объекты Font, Image или GC), которые вы неправильно распределяете. Вам может понадобиться немного времени, чтобы прочитать руководство SWT по управлению ресурсами операционной системы.

Чтобы определить, действительно ли это так, я могу порекомендовать эту полезную статью: Диагностика утечек дескрипторов в приложениях Windows SWT/RCP, которая объясняет, что такое ресурсы, и предлагает использовать Process Explorer или DPus для обнаружения утечек.

Коллега также настоятельно рекомендует Sleak, ориентированное на SWT приложение, которое может фактически информировать вас о том, какие ресурсы остаются в остаточной памяти.

Для очень технического понимания того, что делает дескриптор SWT, в этой статье Sybase описывается три типа: дескриптор объекта пользователя, объект GDI или объект ядра, каждый из которых имеет свой максимум.

Ответ 2

У вас скорее всего есть утечка ресурсов в вашей программе. Используйте следующую утилиту (http://www.eclipse.org/articles/swt-design-2/sleak.htm) как простой способ найти утечки ресурсов swt. Я использовал его для очистки целого множества проблем в приложении rcp, над которым я работал над

Ответ 3

Предел не 10000 ручек. Приложения могут использовать гораздо больше, чем 10000 ручек (если позволяет RAM). Предел находится в ресурсах GDI и User (графические элементы).

Какими ресурсами пользуются приложения SWT (вы можете увидеть это с помощью taskmgr)? Это поможет понять, что протекает.

Ответ 4

Для записи, если бы это был мой вопрос, я бы принял @Paul ответ. Тем не менее, есть одна непроницаемая проблема, которую я хотел бы добавить здесь, чтобы потенциально помочь кому-то другому, если они сталкиваются с этой проблемой...

Проверьте использование шрифтов.

В моем случае мои дескрипторы не были такими высокими, но вместо этого я был новым экземпляром шрифтов и передавал их стилю StyledText. Мне пришлось вместо этого объявлять шрифты, которые я хотел использовать один раз, уровень класса. Это исправило это для меня.

Ответ 5

Я тоже видел эту ошибку в eclipse 3.6 SR1, это оказалось вызвано тем, что сотни вкладок редактора остаются открытыми. Закрытие вкладок фиксировало ошибку.

Ответ 6

Попробуйте выполнить следующие шаги:

  • перейдите в домашний каталог eclipse (где вы установили eclipse), затем перейдите в папку плагинов
  • удалить все недавно установленные плагины, начиная с com.google. *
  • повторите попытку перезапуска вашего затмения, он может снова начать работать (работал у меня.)
  • попробуйте установить старые плагины из Google или только один раз, что вам нужно. (Я собираюсь попробовать это.)

Ответ 7

В моей системе Windows7 x64 я могу воспроизвести его, когда работает TeamViewer 8 (www.teamviewer.com). Когда я останавливаю TeamViewer, ошибка исчезает.

вы можете посмотреть: https://bugs.eclipse.org/bugs/show_bug.cgi?id=402983

Надеюсь, что это поможет.

Ответ 8

Я также встретил эту проблему, но теперь я ее решил. В моем случае я запускаю Win7 с пакетом обновления 1 (SP1) и Spring Tool Suite 3.7.2 (Eclipse Mars 4.5.1) через Citrix XenApp. Эта ошибка возникает, когда я переключаюсь между обозревателем пакетов и редактором Java.

Мое решение: запустить run.msc в Win7, найти "Служба ввода Tablet PC", остановить его.

Надеюсь, это может помочь другим.