Eclipse: Projekt mit src ordner exportieren.

Diskutiere Eclipse: Projekt mit src ordner exportieren. im AWT, Swing, JavaFX & SWT Bereich.
VPChief

VPChief

Hallo,
ich habe in Eclipse ein Programm mit Bildern erstellt. Die Bilder habe ich so angeordnet:
1593199638074.png
Zum Einfügen der Bilder benutze ich diesen Code:
Java:
button5.setIcon(new ImageIcon("src\\textures\\untergrund tex\\tex2.png"));
Wenn ich das Projekt als Runabble Jar File exportiere, sind die Bilder weg.
Kann mir jemand sagen wie ich das verzeichniss mit Exportieren kann.

Vielen Dank schonmal für eure Antworten
 
J

JustNobody

Ressourcen lädt man in der Regel über den Classloader. Ein gängiger Weg ist etwas wie:
getClass().getResourceAsStream("/textures/......") so dass Du den passenden Stream direkt an den Konstruktor von ImageIcon gibst.

Dabei ist wichtig, dass die Dateien natürlich mit im jar File landen und zwar ohne das src.
 
VPChief

VPChief

Danke erstmal für die Antwort
Ressourcen lädt man in der Regel über den Classloader. Ein gängiger Weg ist etwas wie:
getClass().getResourceAsStream("/textures/......")
Das habe ich versucht, aber da kommen da immer Fehlermeldungen.
Daher war ich froh die andere Methode zu finden.
Geht das denn auch mit dieser Methode, die Dateien direkt in die jar zu bekommen, und wie geht das überhaupt?
 
J

JustNobody

Also ich habe keine Ahnung, wie Eclipse hier Projekte im eigenen Format handhabt. Üblich bei Gradle ist, dass Du einen Ordner src/main/java hast für Java Dateien und src/main/resources für die Resourcen.


Ich habe mal etwas geschaut und z.B. https://stackoverflow.com/questions...llow these steps:,by inspecting it using 7zip. gefunden.

Wobei es erst einmal so klingt, dass er Ressourcen aus dem src Ordner immer nehmen würde, daher sollte textures/underground tex/tex2.png enthalten sein. Da könnte ich mir nur vorstellen, dass das Leerzeichen ein Problem machen könnte.
 
VPChief

VPChief

Also, ich habe auch dateien, die ohne leerzeichen sind, die Funktionieren auch nicht. Und wie bekomme ich das in die Jar?
1593253028306.png
Soll ich dann diese Option auswählen, oder?
 
Zuletzt bearbeitet:
VPChief

VPChief

Dumm von mir. hätt ich einfach testen können, hab ich dann auch, hat auf jeden fall nicht geklappt. Aber wenn ich jetzt so andere Programme ansehe, haben die ihre Bilder und Dateien immer in Extra Ordnern neben der exe datei. Ist das in Eclipse nicht möglich, das so zu machen?
 
Zuletzt bearbeitet:
J

JustNobody

Also natürlich kannst Du Dateien auch neben dem jar file haben. Dann kannst Du halt mit dem Pfad zu der jar Datei (https://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file) darauf zugreifen. Aber bei Ressourcen ist es bei Java üblich, Ressourcen im jar vor zu halten. Das läuft beim Bau-Prozess auch automatisch.

Und das, was Du in #5 ansprichst, ist ein ganz anderes Thema. Da geht es um den Umgang mit Abhängigkeiten. Das ist etwas anderes als die Ressource Dateien deines Programmes.

Hast Du denn das jar File einmal angesehen? Sind die Bilder da mit eingepackt worden?
 
J

JustNobody

Du kannst ein jar z.B. mit 7zip ansehen. Dann kannst du nachvollziehen, was wo im Jar gelandet ist.
 
VPChief

VPChief

Tatsächlich, die Bilder sind drin, müsste doch dann eigentlich funktionieren, oder?
1593264228174.png
So siehts da drin aus^^
1593264292150.png
So siehts im Programm aus. Auf den leeren buttons sollten eigentlich Bilder sein.
 
J

JustNobody

Also die Bilder sind drin? Wie versuchst Du diese zu laden? Den Ansatz, wie es gehen sollte, habe ich ja aufgezeigt.
 
VPChief

VPChief

getClass().getResourceAsStream("/textures/......")

Du meinst das?
Java:
JButton start = new JButton ();
start.getClass().getResourceAsStream("textures\\Button_Start.png");
Das mache ich so, aber dann bleibt der Button leer.
 
J

JustNobody

Und wegen dem Leerzeichen im Namen: Das habe ich jetzt auch einmal ausgetestet und das geht ganz ohne Probleme.

Nur was mich wundert: Auf dem Bildschirm sehe ich unter textures kein untergrund tex - das sollte eclipse dann doch eigentlich auch anzeigen ...

Aber wenn es so im jar drin ist, dann muss es ja stimmen ...

getClass().getResourceAsStream("/textures/......")

Du meinst das?
Java:
JButton start = new JButton ();
start.getClass().getResourceAsStream("textures\\Button_Start.png");
Das mache ich so, aber dann bleibt der Button leer.
a) kein Backslash - nutz in Java immer den Forward-Slash.
b) Du startest nicht mit einem Slash. Dadurch fängt er im Package der Klasse an zu suchen, d.h. er will im jar ein program/textures/....

Bei so Methoden, die Du nicht kennst, würde ich generell immer empfehlen, auch einmal die Dokumentation zu lesen. Da steht sowas dann auch immer mit drin.
 
J

JustNobody

Die Bilder, so sie fest zum Programm gehören, mit ins jar File packen und da dann mittels der getResourceAsString Methode laden.
 
VPChief

VPChief

Ok. Und wie würdest du die Methode im Code benutzen? Das kann ich nicht.
getClass().getResourceAsStream("/textures/Button_Start.png");
So?
 
J

JustNobody

Also was ich in der Regel mache:
Ich nutze getResourceAsStream in Zusammenhang mit ImageIO zum Laden eines Bildes.
Das sieht man dann als erste Antwort in https://stackoverflow.com/questions/22733881/java-swing-unable-to-load-image-using-getresource

Die zweite Antwort zeigt, wie es ohne Image geht, da wird dann statt getResourceAsStream getResource benutzt, was eine URL liefert. Ich weiß nicht mehr genau, unter welchen Bedingungen mir das aber mal Probleme gemacht hat in der Vergangenheit, aber das war wohl etwas, mit Experimenten bezüglich packen der jar in eine exe incl. Schutz oder so ... also ggf. Vernachlässigbar
 
mihe7

mihe7

So siehts da drin aus^^
Auf dem Bild sieht man aber nur den Ordner textures, nicht ob in dem Ordner die Bilder auch wirklich vorhanden sind.

Das mache ich so, aber dann bleibt der Button leer.
Dein Code
Java:
JButton start = new JButton ();
start.getClass().getResourceAsStream("textures\\Button_Start.png");
gibt auch wenig Sinn. Mal abgesehen davon, dass hier der Schrägstrich zu verwenden ist, wie @JustNobody ja bereits angemerkt hat, lässt Du Dir zwar einen Stream liefern, machst damit aber nichts.

Java:
// Stream holen, und das "darin enthaltete" Bild einlesen
Image image = ImageIO.read(getClass().getResourceAsStream("textures/Button_Start.png"));
// Bild als Icon des Buttons start setzen
start.setIcon(new ImageIcon(image));
 
VPChief

VPChief

Danke,
Java:
// Stream holen, und das "darin enthaltete" Bild einlesen
Image image = ImageIO.read(getClass().getResourceAsStream("textures/Button_Start.png"));
// Bild als Icon des Buttons start setzen
start.setIcon(new ImageIcon(image));
Das wollte ich wissen, wie ich das Verwende. Werde es mal Testen, aber so eine Methode hat mir vor 2 Monaten oderso schon probleme gemacht
 
Thema: 

Eclipse: Projekt mit src ordner exportieren.

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben