【发布时间】:2015-08-18 09:55:25
【问题描述】:
我正在尝试更改图像视图中的图像。
我知道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。
在调试时,我注意到在第 57 行的 IconProviderService.class 内:
@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试图从bundle中查找片段,然后在这个片段中寻找路径。 (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(来自上面的代码)始终为空。
【问题讨论】:
-
这听起来很难破解。您能否添加以下信息:图标对您有用吗? (例如,表格列上的 getConfiguredIconId)您要显示的图标文件(png)在哪里?对应的 Icons 类在哪里(java 文件)?您在哪个包中检索图标?在调用检索 IconSpec 期间,AbstractIconProviderService 中的 m_hostBundle 值是多少?
-
是的,设置图标有效。如果我设置 getConfiguredIconId 它可以工作,如果在代码集 setIconId 和更新页面中它也可以工作。图标是 Scout 中的默认图标,或者是我添加的图标(客户端/资源/图标/...)。 Icons.class 位于共享文件夹(根目录)中。我发布的捆绑包是:org.eclipse.scout.rt.ui.rap.mobile。
-
我尝试设置不同的捆绑包 provider.setHostBundle(Activator.getDefault().getBundle());但它也没有用。
-
我忘记了,我尝试在表单和客户端包内设置图标(不同的类)
-
我添加编辑问题(编辑3)
标签: image eclipse-scout