SWT Больше никаких ручек

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

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


person James    schedule 07.01.2010    source источник


Ответы (8)


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

org.eclipse.swt.SWTError: No more handles

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

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

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

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

person Paul Lammertsma    schedule 07.01.2010

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

person fisherja    schedule 08.01.2010

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

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

person ReinstateMonica Larry Osterman    schedule 07.01.2010

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

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

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

person javamonkey79    schedule 28.12.2010

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

person Adam    schedule 24.04.2011

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

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

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

вы можете изучить: https://bugs.eclipse.org/bugs/show_bug.cgi?id=402983

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

person Harpreet Singh Bhullar    schedule 09.12.2014

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

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

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

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

person Ivan    schedule 07.12.2016