Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как не дать программе завершиться?


Автор: ALexALed 19.3.2010, 12:10
Возникла следующая проблема: У меня есть консольная программа которая подключает слушатель к почтовому ящику, слушатель подключается, все нормально, просто после одного прохода кода слушателя программа корректно завершается, подскажите как заставить программу постоянно слушать ящик, а не завершаться??? 

Автор: powerOn 19.3.2010, 12:53
Цитата(ALexALed @  19.3.2010,  12:10 Найти цитируемый пост)
просто после одного прохода кода слушателя программа корректно завершается


бесконечный цикл не решает проблему?

Автор: ALexALed 19.3.2010, 12:59
нет... память съедает... а если через трейд делать тогда теряется процесс получения писем...и слушатель не реагирует на их добавление 

это маин
Код

public class MainClass {
public static void main(String[] args){
 MailManager cm = new MailManager("почта", "пароль", "сервер", "порт");
             cm.listingMail();

}
}


а это слушатель
Код

public void listingMail(){

        inbFolder.addMessageCountListener(new MessageCountAdapter() {
            @Override
            public void messagesAdded(MessageCountEvent e) {
                try {
                    Message[] mf = inbFolder.getMessages();
                    FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
                    Message[] messages = inbFolder.search(ft);
                    for (Message m : messages) {
                        JabberNotifyManager jn = new JabberNotifyManager("джабер пользователь", "пароль", "джаббер сервер", порт);
                        org.jivesoftware.smack.packet.Message msg = jn.getFormattMessage(m.getFrom(), m.getDescription(), m.getSubject());
                        m.setFlag(Flag.SEEN, true);
                        for (Address adr : m.getAllRecipients()) {
                            jn.sendMessage(adr, msg);
                        }
                    }
                } catch (MessagingException ex) {
                   ex.printStackTrace();
                }
 }
});

}


Автор: jManiak 19.3.2010, 14:20
а если делать так чтобы память освобождалась? т.е. обнулять все что связано с получением писем и т.д. тогда gc будет высвобождать память для последующих прослушек...

Автор: ALexALed 19.3.2010, 15:09
я думал она автоматически освобождается...

Автор: jManiak 19.3.2010, 19:00
да, если нет ссылок на объекты...

Добавлено через 2 минуты и 16 секунд
http://ru.wikipedia.org/wiki/%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BC%D1%83%D1%81%D0%BE%D1%80%D0%B0
Цитата

В системе со сборкой мусора обязанность освобождения памяти от объектов, которые больше не используются, возлагается на среду исполнения программы. Программист лишь создаёт динамические объекты и пользуется ими, он может не заботиться об удалении объектов, поскольку это делает за него среда. Для осуществления сборки мусора в состав среды исполнения включается специальный программный модуль, называемый «сборщиком мусора». Этот модуль периодически запускается, определяет, какие из созданных в динамической памяти объектов более не используются и освобождает занимаемую ими память.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)