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

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

25 голосов
/ 07 января 2010

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

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

Ответы [ 8 ]

43 голосов
/ 07 января 2010

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

org.eclipse.swt.SWTError: No more handles

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

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

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

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

7 голосов
/ 08 января 2010

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

2 голосов
/ 07 января 2010

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

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

1 голос
/ 24 апреля 2011

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

1 голос
/ 28 декабря 2010

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

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

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

0 голосов
/ 07 декабря 2016

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

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

Мое решение:
запустить services.msc в Win7, найти «Служба ввода планшетного ПК», остановить его.

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

0 голосов
/ 09 декабря 2014

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

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

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

0 голосов
/ 14 июня 2014

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

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