Я новичок в разработке eclipse, и, изучая SWT, я узнал, что мне нужно избавиться от display, используя приведенный ниже фрагмент:

while (!shell.isDisposed ()) {
    if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();

Таким образом, он распоряжается всеми ресурсами ОС, полученными дисплеем. У меня вопрос: должен ли я делать то же самое в плагине Eclipse? Предположим, у нас есть такой код createPartControl():

public void createPartControl(Composite parent) {
      //Other codes
      parent.dispose(); //Shoud I compulsory do this in eclipse plugin?
}

Или eclipse позаботится об утилизации ресурсов автоматически? Я предполагаю, что я должен избавиться от него вручную. Не могли бы вы поправить меня, если я ошибаюсь?

0
Pradeep Simha 21 Мар 2013 в 17:06
Правильная очистка ресурсов - это лучшая практика для Java и всех языков. Предполагать, что это будет сделано автоматически, в лучшем случае - напугать вас, а в худшем - небрежно.
 – 
duffymo
21 Мар 2013 в 17:26

1 ответ

Лучший ответ

parent.dispose() - неправильный способ сделать это. вы должны очистить ресурсы, которые вы создали в своем композите. Не удаляйте родителя, поскольку он не был создан вашим представлением / композицией.

Прослушайте событие удаления на виджете и выполните необходимую очистку. Предположим, вы создали в своем представлении такие ресурсы, как «Цвета, шрифты, изображения… и т. Д.», И вы не хотите использовать их повторно, прослушивать событие dipose на своем композите и подавлять их.

yourComposite.addListener(SWT.dispose, new Listener(){

    public void handleEvent(Event e){
            image.dispose(); 
            font.dipose();  
            color.dipose()

    }

});
1
sambi reddy 21 Мар 2013 в 19:42