Я пытаюсь изменить изображение в представлении изображения.
Я знаю, что getTestImageField().setImageId(Icons.Logo);
не сработает, потому что не обновит рендерер.
Поскольку мне нужно использовать setImage()
, мне нужен способ получить изображение из класса Icons
.
Как предложил Патрик, я попробую
final IconProviderService provider = SERVICES.getService(IconProviderService.class);
final IconSpec ic = provider.getIconSpec(AbstractIcons.StatusError);
final byte[] content = ic.getContent();
но моя проблема в том, что ic
всегда null
.
Пока я отлаживаю это, я замечаю, что внутри IconProviderService.class
в строке 57:
@Override
protected URL findResource(String fullPath) {
URL[] entries = FileLocator.findEntries(m_hostBundle, new Path(fullPath));
if (entries != null && entries.length > 0) {
URL url = entries[entries.length - 1];
if (LOG.isDebugEnabled()) {
LOG.debug("find image " + fullPath + " in bundle " + m_hostBundle.getSymbolicName() + "->" + url);
}
return url;
}
return null;
}
URL[]
записей всегда пусты, независимо от того, какую иконку ведьмы я пытаюсь представить.
После дальнейшей отладки я обнаружил, что FileLocator
пытается найти фрагменты из пакета, а затем искать путь внутри этих фрагментов. (line 242
)
Bundle[] fragments = activator.getFragments(b);
но Bundle[] fragments
всегда равно нулю.
Обычно мой пакет b
равен (Bundle) EquinoxBundle : org.eclipse.scout.rt.ui.rap.mobile_4.0.100.20140829-1424
.
Я хочу попробовать с другим пакетом, поэтому я делаю:
final BundleContext context = Activator.getDefault().getBundle().getBundleContext();
for (final Bundle b : context.getBundles()) {
final IconProviderService provider = SERVICES.getService(IconProviderService.class);
provider.setHostBundle(b);
final IconSpec ic = provider.getIconSpec(AbstractIcons.StatusError);
if (ic != null) {
final byte[] content = ic.getContent();
imageField().setImage(content);
}
}
но fragments
(из приведенного выше кода) всегда равно нулю.