Трудно сказать без контекста. В частности, откуда вызывается этот код и что делает getImageIcon () ??
Одна проблема, которую я вижу, заключается в том, что вы устанавливаете значок изображения в фоновом потоке, а не в потоке пользовательского интерфейса. Это может быть причиной того, что она, похоже, не изменится, пока событие пользовательского интерфейса не вызовет обновление. Попробуйте изменить DownloadImage на что-то вроде следующего:
class DownloadImage extends AsyncTask<Void, Void, Drawable>{
@Override
protected Drawable doInBackground(Void... params) {
return Util.getImageFromURL(imageURL);
}
@Override
protected void onPostExecute( Drawable d ) {
getImageIcon().setImageDrawable(d);
}
}
new DownloadImage().execute();
Если я прав, это должно решить проблему.
Если это сработает, отлично, хотя я думаю, что ваш код может использовать небольшую очистку. При условии, что все это происходит в потоке пользовательского интерфейса (что, вероятно, верно, учитывая, что вы создаете новый обработчик в этом потоке), вам вообще не нужно использовать обработчик, а также не нужно создавать новый Runnable. Просто удалите их и создайте новый экземпляр DownloadImage напрямую и вызовите execute ().