2015-05-17 4 views
1

У меня есть бесконечный цикл, где я создаю объект. В конце цикла, после создания объекта, я запустил его. При запуске объекта программа будет блокироваться, потому что у меня есть еще один бесконечный цикл в моем TcpClient-объекте. Но иногда этот бесконечный цикл прерывается из-за обработанной ошибки и вызовет конкретный метод в моем mTcpClient-Object, который называется «повторно подключиться». Там я хотел бы удалить объект mTcpClient, чтобы первый бесконечный цикл продолжался и создавал новый объект mTcpClient.Java: удалить и воссоздать объект

Как это сделать?

while(true) { 

    //we create a TCPClient object and 
    mTcpClient = new TcpClient(new TcpClient.OnMessageReceived() { 
     @Override 
     public void reconnect() { 
      // HERE I want to delete this object 
     } 
    .... 
    }); 

    if (mTcpClient != null) 
     mTcpClient.run(); 
} 
+0

Вы не можете вручную удалить объект в Java. Можете ли вы пояснить, что вы подразумеваете под «удалением» объекта? – CKing

+0

Было бы полезно, если вы покажете свою полную программу, но насколько я понимаю ваш вопрос, вы не можете удалять объекты, когда захотите. Это делается автоматически, когда сборщик мусора проверяет неиспользуемые объекты. Если вы хотите что-то сделать, а сбор мусора 'TcpClient', вы можете переопределить' protected void finalize() 'метод' Object'. – Ved

+1

@Ved Рекомендуемые финализаторы - это почти всегда плохие советы. – chrylis

ответ

1

mTcpClient = null; Установка объекта в нуль заставит сборщик мусора удалить объект для вас.

+0

То, что вы предлагаете, невозможно. 'mTcpClient' не будет доступен внутри анонимного внутреннего класса. Попробуйте. – CKing

+1

Я пробовал, я думаю, это может сработать. Но я должен проверить несколько вещей, пока не узнаю, является ли это решением моей проблемы. – progNewbie

Смежные вопросы