AbstractUIPlugin.imageDescriptorFromPlugin liefert immer null zurück

schnurpsel

Mitglied
Hallo,

ich stehe mal wieder vor einem Problem. Und zwar möchte ich über ein decoration.addOverlay das Icon eines Elements verändern.

Dafür habe ich einen Ordner icons angelegt, in welchem sich das Bild befindet.
In IImageKeys habe ich
Java:
public static final String ICON_OVERLAY = "icons/sample_decorator.gif";
angelegt.

In der Klasse MakeDecoration steht der Aufruf
Java:
		if (imported) {
			ImageDescriptor descr = Activator.getImageDescriptor(ITestingImageKeys.ICON_OVERLAY);
		}

und im Activator des Plugins steht
Java:
	public static ImageDescriptor getImageDescriptor(String path) {
		ImageDescriptor descr = AbstractUIPlugin.imageDescriptorFromPlugin(
				Activator.PLUGIN_ID, path);
		return descr;
	}

Die Funktion liefert mir aber immer "null" zurück. Ich habe schon gegooglet und auch hier im Forum gelesen, aber ich finde das Problem einfach nicht.
Hoffe mir kann jemand einen Tipp geben :)

Grüße von schnurpsel
 

Wildcard

Top Contributor
Stimmt die Groß/Kleinschreibung? Stimmt der Pfad? Liegt "icons" im Root des Bundles? Funktioniert es nur nach dem installieren nicht mehr, oder auch schon aus der IDE heraus?
 

schnurpsel

Mitglied
Der Ordner icons liegt auf der gleichen Ebene wie der src-Ordner und es funktioniert schon aus der IDE heraus nicht.

Ich habe das jetzt etwas abgeändert und zwar im Activator des Plugins in der start-Funktion die Bilder in die ImageRegistry geladen
Java:
imageRegistry = plugin.getImageRegistry();
imageRegistry.put(ITestingImageKeys.ICON_OVERLAY,ImageDescriptor.createFromFile(Activator.class,ITestingImageKeys.ICON_OVERLAY));
imageRegistry.put(ITestingImageKeys.ANALYSED,ImageDescriptor.createFromFile(Activator.class,ITestingImageKeys.ANALYSED));

Jetzt liefert
Java:
ImageDescriptor descr = plugin.getImageRegistry().getDescriptor(ITestingImageKeys.ICON_OVERLAY);
zwar nicht mehr null zurück, aber die dargestellten Bilder sind falsch. Also statt dem gewünschten Bild wird nur ein kleines orangefarbenes Quadrat angezeigt. Die overlay-Icons haben genau die gleichen Eigenschaften bzgl. Größe und Auflösung wie die overlay-Icons im Originalprogramm. Im Anhang ein kleiner Screenshot (das untere Icon wird vom Originalprogramm overlayed und das obere Icon wird von meinem Plugin overlayed und soll eigentlich anders aussehen).

Das gleiche Icon wird übrigens auch für eine Button in der Toolbar verwendet und dort anstandslos angezeigt.

Viele Grüße
schnurpsel
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Das ist lediglich das generische 'konnte Icon nicht laden/finden' Icon der Image Registry. Ich Tippe weiterhin auf ein Pfad Problem bzgw. Groß-Kleinschreibung. Zur Not, wirf denn Debugger an
 

schnurpsel

Mitglied
Hallo,

ich habs jetzt hinbekommen mit folgenden Aufrufen. An den Pfaden lag es somit nicht, denn die habe ich nicht verändert. Ich verstehe zwar immer noch nicht, warum es anfangs nicht so funktioniert hat, wie es erstmal überall als einfachste Lösung angegeben wird, aber Hauptsache ich sehe jetzt die korrekten Icons.

Java:
	 protected void initializeImageRegistry(ImageRegistry registry) {
	        super.initializeImageRegistry(registry);
	        Bundle bundle = Activator.getDefault().getBundle();

	        ImageDescriptor myImage = ImageDescriptor.createFromURL(FileLocator.find(bundle, new Path(ITestingImageKeys.OVERLAY_ICON),null));
	        registry.put(ITestingImageKeys.OVERLAY_ICON, myImage);
	}

public static ImageDescriptor getImageDescriptor(String path) {

		AbstractUIPlugin plugin = Activator.getDefault();
		ImageRegistry imageRegistry = plugin.getImageRegistry();
		ImageDescriptor descr = imageRegistry.getDescriptor(path);
		return descr;
	}

Danke für deine Hilfe wildcard :)

Grüße von schnurpsel
 

KiezKauz

Neues Mitglied
I had a similar problem as
Code:
Platform.getBundle()
never returned my plugin bundle and therefore no images could be found. It turned out, that I had renamed the pluginid in Manifest.mf long ago, but did not pay attention to the static constant PLUGIN_ID in my Activator class. After adjusting that constant to the same ID as in the Manifest.mf it worked.
 

Oben