# Relative Pfade



## Gast (2. Dez 2007)

Hallo 

Ich lade ein Bild, um es später zu scalieren und als Hintergrundbild anzuzeigen Dazu habe ich bis jetzt folgendes benutzt:

```
image = new Image(null, "C:/MDSD/GC/GodsContest/pics/IMG_0170.jpg");
```

Alles funktionierte super. Nun soll ich auf relative Pfade unsteigen. Nach langen suchen (auch hier im Forum) wurde ich nicht fündig. Z.B.:

```
URL test = getClass().getResource("/pics/IMG_0170.jpg");
		image = new Image(null, test.getRef());
```

Dabei ist der Order "pics" auf der selben Ebene wie der src-Ordner.

Was mache ich dabei falsch?

Ich verwende Eclipse 3.3, Java 6.0 und ein RCP+SWT projekt.

Danke im Vorraus.


----------



## Shadeo (2. Dez 2007)

kanns zwar grad nicht testen, aber versuch


```
URL test = getClass().getResource("../pics/IMG_0170.jpg");
```


----------



## Gast (2. Dez 2007)

jo habe ich schon. mit einem Punkt, mit zwei punkten am Anfang und auch mit "\\" als Fileseperator und dem File.Seperator...
Leider alles nichts.


----------



## The_S (3. Dez 2007)

Der src-Ordner wird ja auch nicht ausgeführt. Dein Bilder ordner muss auf selber "Ebene" wie die class-Dateien sein.


----------



## Guest (5. Dez 2007)

Hm... also irgendwie scheine ich das ganze immer noch nicht so ganz "gefressen" zu haben...

Ich fang mal sehr kleinschrittig an, damit ich nicht vielleicht etwas vergessese.

ich habe offenes Eclipse. Durch die automatische Generierung meines Projektes habe ich unter meinem Projektnamen folgenden "tree"-Elemente:
- src
- JRE System Library
- Plug-in Dependencies
- Deployment
- icons
- META-INF
- buil.properties
- Projektname.product
- plugin.xml

Hinzugefügt zu dieser Liste habe ich "pics", wo nun meine Bilder lagern.

Nun versuche ich mein Projekt zu debuggen. So viel ich das verstanden habe, werden erst beim Starten die ganzen Class-Dateien erstellt und zwar im bin-Ordner. Doch den Bin-Ordner habe ich nicht mal in meiner Ansicht.

Desweiteren gibt es standardmäßig auch einen icon-Ordner aus dem offenbar ja doch die Bilder gezogen werden können, auch wenn extrem tief in Code vergraben sind. Warum kann ich es denn nicht mit meinem Pics machen und wie? Und wenn Doch, naja... wie oder mit welchen Pfadangabe...


----------



## Wildcard (5. Dez 2007)

Pack die Dinger in das icon Verzeichnis und lass sie dir vom Plugin geben (zB AbstractUIPlugin#imageDescriptorFromPlugin).
Nicht vergessen icons in den binary build aufzunehmen.


----------



## The_S (5. Dez 2007)

du kannst den pics ordner auch in den src ordner verschieben. Dann musst du aber über Eclipse kompilieren, dabei werden die Bilder automatisch in den bin ordner mit kopiert.


----------



## Wildcard (5. Dez 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> du kannst den pics ordner auch in den src ordner verschieben. Dann musst du aber über Eclipse kompilieren, dabei werden die Bilder automatisch in den bin ordner mit kopiert.


Es handelt sich wie der OP schreibt um ein RCP Projekt, also sollte man die Struktur auch Eclipse Like gestallten. Der Weg führt über die ImageRegistry, bzw. das Plugin.


----------



## The_S (5. Dez 2007)

ach verdammt, sry hab ich überlesen


----------



## Guest (5. Dez 2007)

Danke für die Tips!

hui... nun wird es doch komplizierter, als ich dachte...

Aber wofür steht OP?

also... gibt es ein Tutorial oder eine deutsche Erklärung für das AbstractUIPlugin#imageDescriptorFromPlugin u.s.w.?
Ich bin neu in Java und erst recht im RCP.

Das Projekt selbst soll später Standalone sein. Also der Teil den ich mache. Es soll aber Schnittstellen zur verfügung stellen, so dass weitere Plugins dazu geschrieben werden können. Deshalb RCP. Ist auch eine Vorgabe von oben.

Wo gibt es denn dazu eine "vernüftige" Beschreibung? öhm... sagen wir es so: Wo gibt es eine KLEINSCHRITTIGE Beschreibung für blutige Anfäger wie mich?


----------



## Wildcard (5. Dez 2007)

OP = Original Poster

Wo genau ist dein Problem?
Du hast eine Plugin Klasse (den Activator deines Plugins). Selbige hat eine Methode um Images einfach über deren Pfad aus dem Plugin zu laden, also einfach nur benutzen.
Es sei denn es handelt sich nicht um ein UI Plugin, dann wird allerdings die Frage erlaubt sein, wieso ein Plugin das nicht von AbstractUIPlugin erbt überhaupt Images braucht.


----------



## Guest (5. Dez 2007)

> Du hast eine Plugin Klasse (den Activator deines Plugins).



AHHHHH! *bg* Sorry, ich bin wirklich erst am Anfang... Ne dann ist klar was gemeint ist! Ich weiß einfach noch nicht ganze wo ich genau gucken muss...  

Ich werde dies gleich durchtesten, weil es mich interessiert. Aber per Zufall bin ich noch auf etwas gestoßen, was auch funktioneirt hat:


```
image = new Image(null, getClass().getResourceAsStream("/pics/myImage.jpg"));
```

Das einzige, was man beachten muss, ist dass man den pics-Ordner mit in den Build einpackt. Aber das wurde ja schon gesagt.

*VIELEN DANK FÜR EURE HILFE!*


----------



## Wildcard (5. Dez 2007)

Du sprichst von einem RCP/SWT Projekt. Du solltest grundsätzlich über die Activator Klasse gehen, da dort alle Images in die ImageRegistry gepackt werden.
Bei SWT muss nämlich peinlichst darauf geachtet werden das alle Resourcen wieder freigegeben werden.
Wenn du also auf diese Art ein Bild erzeugst, hast du einen Memory Leak produziert.


----------

