Бумага , на которую вы ссылаетесь, ясно дает понять:
Сами виджеты обычно не нужно утилизировать
программно. Оболочка и ее дочерние элементы располагаются, когда пользователь
закрывает окно.
Таким образом, в то время как оболочка нуждается в , необходимо избавиться, бремя это не на вас. Вам также не нужно звонить dispose
по любому из детей, так как избавление от родителей сделает это за вас. Опять же, по ссылке, которую вы цитируете:
Когда вы утилизируете Shell, его дочерние элементы располагаются. По факту,
утилизация любого Композита уничтожит всех его детей.
Однако вы должны убедиться, что вы распоряжаетесь созданными вами ресурсами, которые не дочерние. Например: цвета и шрифты. Вам явно нужно вызвать их метод dispose. Лучше всего подключить слушателя dispose к Composite
, который вы используете для этого. Например:
public class MyComposite extends Composite
{
private final Color color;
public MyComposite(Composite parent, int style)
{
super(parent, style);
color = new Color(getShell().getDisplay(), 255, 255, 255);
addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e)
{
color.dispose();
}
});
}
}
Важно отметить, однако, что вы не должны распоряжаться Color
s, которые вы используете , но не create . Например, не удаляйте системные цвета, доступные в Display#getSystemColor()
.