Image in jar einbauen

wyldstyle

Aktives Mitglied
Hallo, ich hätte eine (wahrscheinlich recht simple) Frage:

Angenommen ich hätte folgende Struktur:

/bin
klassendateien
/bin/images
bilddateien

jetzt erzeuge ich aus meinem projekt eine ausführbare jardatei, diese funktioniert aber nicht korrekt denn das bild wird nicht gefunden, beim testen in eclipse funktioniert alles reibungslos.

Ich habe die Grafik folgenderweise eingebunden:
Code:
java.net.URL imageURL = GUI.class.getResource("images/background.png");
		ImageIcon icon = new ImageIcon(imageURL);

Kann mir jemand sagen wie ich das Unterverzeichnis mit einbinde in die jardatei, oder geht das auf dem obigen wege so nicht!?


zweite Frage:

Nehmen wir an ich habe ein Frame größe 800x600(standartmäßig beim start) und ein hintergrundbild(auf dem frame) mit 1920x1200
fall1:
starte ich jetzt das programm wird nur ein ausschnitt der grafik angezeigt bis das fenster eben 1920x1200 ist.
fall2:
ich starte das programm in 800x600 und habe eine grafik 800x600 auf dem frame -> maximiere ich jetzt das fenster, skaliert die grafik halt nicht mit.

Wie bekomme ich die grafik dazu mit der fensetrgröße zu skalieren? brauche ich für jede auflösung n eigenes bild oder vektorgrafiken!?
 

XHelp

Top Contributor
Vllt klappt ja
Java:
GUI.class.getClassLoader().getResource("bin/images/background.png")

Zu der 2. Frage: wie machst du denn das Bild auf dein Frame?
 
Zuletzt bearbeitet:

wyldstyle

Aktives Mitglied
funktioniert leider so nicht!

2tens: Ich hatte die Grafik auf ein Jlabel gepackt, da ich nicht wusste wie ich das anders machen soll. am liebsten (logisch betrachtet) wäres es mir wenn ichd as ding direkt auf den ganzen frame klatschen könnte aber bisher sind alle Versuche fehlgeschlagen!
 

XHelp

Top Contributor
Hm. Ich habe gerade meinen Vorschlag ausprobiert (package bin und bin.image) und das klappt, auch in einer jar.

Du kannst ja von einem JPanel ableiten und paintComponent überschreiben. Da malst du das Bild, und zwar skaliert auf die Panelgröße. Wenn sich nun deine Framegröße ändert, dann ändert sich auch die Panelgröße und paintComponent wird aufgerufen. Dann malst du quasi immer automatisch ein skaliertes Bild.
 

wyldstyle

Aktives Mitglied
Hallo nochmal XHelp, ich denke das stellt mich vor ein kleines Problem - ich erbe schon von JFrame und kann doch nur von einer Klasse direkt erben (kein Interface)?

Ich poste einfach mal meine Guicode rein, vielleicht ist da ja irgend ein Logikfehler drin:

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class GUI extends JFrame implements ActionListener, WindowListener {
	
	private String name = "";
	private short playercount = 0;
	private long money = 0;
	private long smallblind = 0;
	private long bigblind = 0;
	
	
	GUI(String name,short playercount, long money, long smallblind, long bigblind){
		
		this.name = name;
		this.playercount = playercount;
		this.money = money;
		this.smallblind = smallblind;
		this.bigblind = bigblind;
		java.net.URL imageURL = GUI.class.getResource("images/background.png");
		ImageIcon icon = new ImageIcon(imageURL);
		icon.setImage(icon.getImage().getScaledInstance(1980,1200, Image.SCALE_FAST));
		
		setTitle("Texas Code'em");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(true);
		
		getContentPane().setBackground(Color.green);
		JLabel test = new JLabel(icon);
		getContentPane().add(test);
		
		
		
		
		
	}  
	 

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowActivated(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosed(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		System.exit(0);
		
		
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowIconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowOpened(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

}
 

XHelp

Top Contributor
Dass du nur von einer Klasse ableiten kannst, hast du recht. Aber du kannst ja auch 2 Klassen erstellen:
Java:
	private class BGPanel extends JPanel {
		private Image image;

		public BGPanel(Image image) {
			super();
			this.image = image;
		}

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
		}

	}

anstatt jetzt JLabel auf Frame zu packen, machst du:
Java:
BGPanel test = new BGPanel((new ImageIcon(MainFrame.class.getClassLoader().getResource("bin/images/chuck.png")).getImage()));
getContentPane().add(test);

Alle anderen Componenten fügst du dem BGPanel hinzu.
 
Zuletzt bearbeitet:

Ein Keks

Bekanntes Mitglied
kleine neben-info:
Bei
Code:
class.getRessource(...)
ist der Pfad relativ zur Klasse, bei
Code:
class.getClassLoader().getRessource()
hingegen der absolute Pfad in der Jar (also wenn die datei im package data liegt und Blubb.gif heißt: "data/blubb.gif") bzw. vom Classpath aus
 

wyldstyle

Aktives Mitglied
Oh Klasse, das funktioniert genauso wie ich das wollte - zumindest in eclipse.

Beim exportieren hab ich immernoch den Fehler, dass die Quelldatei vom Bild nicht erkannt wird. ich hab die grafik aus scpass in jedes verzeichnis des projektes kopiert...aber finden tut er immernoch nix! woran könnte das noch liegen?
 

XHelp

Top Contributor
Gegenfrage: wie exportierst du denn?
File > Export > Runnable JAR File > (richtige Konfiguration) + extrackt libraries?

Weiß es leider nicht von Eclipse, aber Hudson ingoriert z.B. Resourcen in normales Packages.
 

wyldstyle

Aktives Mitglied
Ja eigentlich genauso:

File > Export > Runnable JAR File > "Extract required libraries into generated jar" > Finish

hab alle optionen da ausprobiert - aber das image wird nie eingebunden. hab das jetzt manuell eingefügt - das dürfte auf lange sicht aber keine option sein. Zumindest weiss ich jetzt wo das Problem liegt, danke vielmals für deine aufopfernde Hilfe!
 

Amios

Mitglied
Ich habe das selbe Problem, finde jedoch keine Lösung.

Ich habe mir ein Jarfile angelegt. Doch wenn ich dieses ausführe, findet er die benötigtene Bilder nicht.
Ich habe das File untersucht und die Bilder sind in diesem vorhanden.

Die Verzeichnisstruktur sieht wie folgt aus

Code:
- src
- Guis
| - playerGui
   | - PlayerGui.java
| + LoginGui
- Images
| - icon.gif

mein Code zum laden des icons, sieht wie folgt aus:
Java:
guiframe = new JFrame("IViRnN: ServerBrowser");
guiframe.setIconImage(new ImageIcon("./Images/icon.gif").getImage());

dies Funktioniert auch unter Eclipse.
Wenn ich das Project jedoch als Jar-file exportiere findet er den Pfad zum Image nicht mehr.
Ich habe nun schon diverse Mechanismen versucht.
Selbst
Java:
PlayerGui.class.getResource("./Images/icon.gif");
liefert "null" zurück.
wie kann ich das bild sowohl im Jar als auch im offenen Projekt laden?

bzw. gibt es eine Möglichkeit mir anzeigen zu lassen, in welchem Pfad gerade gesucht wird?
 
Zuletzt bearbeitet:

Grey_M

Aktives Mitglied
Also ich benutze in meinem Programm folgenden Pfad.
Java:
ImageIO.read(MonitoringFrame.class.getResourceAsStream("/images/icon.gif"))
Wenn ich die Jar Datei öffne, dann ist der Ordner images direkt zu sehen, also in der obersten Ebene
 

Amios

Mitglied
Also ich benutze in meinem Programm folgenden Pfad.
Java:
ImageIO.read(MonitoringFrame.class.getResourceAsStream("/images/icon.gif"))
Wenn ich die Jar Datei öffne, dann ist der Ordner images direkt zu sehen, also in der obersten Ebene

Funktioniert das bei dir sowohl in der Entwicklungsumgebung als auch in der Jar?
 

Grey_M

Aktives Mitglied
Funktioniert das bei dir sowohl in der Entwicklungsumgebung als auch in der Jar?

Ja. Kannst dir ja mal hier im Forum unter Codeschnippsel den AnalyseSleeper anschauen. Da habe ich das verwendet.

das einzige was mir mal aufgefallen ist, die Methode von der aus
Java:
MonitoringFrame.class.getResourceAsStream...
aufgerufen wird darf nicht statisch sein. Ich musste bei mir von der Klasse ein Objekt erzeugen und darüber dann die Methode aufrufen.
 

Amios

Mitglied
erstmal Danke Grey_M für deine Hilfe.
Ich habe inzwischen das Problem gefunden und behoben.
Der Grund, warum die Bilder entweder nur in der Jar, oder nur in der Entwicklungsumgebung gefunden wurde war: Nicht alle Quellen lagen im src-folder von Eclipse. Ich vermute mal, da das Projekt ziemlich groß ist, dass es zur Übersichtlichkeit dienen soll. Da aus dem src beim kompilieren die kompilierten Files ins bin geschrieben werden, wird beim ausführen auch diese Ordnerstruktur gewählt. D.H. die Bilder müssen dann auch relativ zum class-file liegen. Bei der Jar verhällt es sich jedoch anders, da dort eine Andere Ordnerstruktur generiert wird. Um eine identische Ordnerstruktur zu bewerkstelligen, müssen die Quellordner, die nicht im src liegen mit in den Buildpath aufgenommen werden. Dann klappt es auch mit der Jar.

Danke nochmals, dass du mich auf die Ordnerstruktur aufmerksam gemacht hast ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
kodela angezeigtes Image entfernen AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
S Stretch Image in ImageView AWT, Swing, JavaFX & SWT 4
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
L JavaFX Image mit Blureffect AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
B Graphics to Image AWT, Swing, JavaFX & SWT 3
L Image in anderes kopieren AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
I Image im PopupMenu vom SystemTray AWT, Swing, JavaFX & SWT 8
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
T Image aus "nicht-src-ordner" AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
G JavaFX Image vergrößern AWT, Swing, JavaFX & SWT 5
U Image mit Zeichenbereich rotieren AWT, Swing, JavaFX & SWT 3
P Speicherproblem SWT.Image in Nebula-Gallery AWT, Swing, JavaFX & SWT 3
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
I Image Button AWT, Swing, JavaFX & SWT 4
U IntBuffer zum Image konvertieren. AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
D Image.getScaledInstance() vs. Netzwerkverbindung??? AWT, Swing, JavaFX & SWT 2
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
lumo SWT Image funktion auf ImageDaten AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
S Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 2
0 Mousecurser mit Image hinterlegen AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
D iText PdfPCell mit Image AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
S Button mit Image AWT, Swing, JavaFX & SWT 7
A Skaliertes Image pixelweise bearbeiten AWT, Swing, JavaFX & SWT 6
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
F SWT GC drawText auf halbtransparentem Image AWT, Swing, JavaFX & SWT 21
G Swing JEdtitorPane und HTML Image Seite AWT, Swing, JavaFX & SWT 2
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
C Image performant skalieren AWT, Swing, JavaFX & SWT 5
D SWT Image Farbtiefe AWT, Swing, JavaFX & SWT 2
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
lumo SWT Composite + Image + zeichnen AWT, Swing, JavaFX & SWT 4
V Ein Image als Button (nicht mit JButton(Icon)) AWT, Swing, JavaFX & SWT 5
D Image Viewer gesucht AWT, Swing, JavaFX & SWT 5
Kr0e Image schärfen AWT, Swing, JavaFX & SWT 2
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
T Image auf Image zeichnen AWT, Swing, JavaFX & SWT 2
E Warum ist offscreen (mit Image) schneller? AWT, Swing, JavaFX & SWT 11
G Swing Image speichern / 0 Byte AWT, Swing, JavaFX & SWT 7
H Image abspeichern AWT, Swing, JavaFX & SWT 4
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
Luk10 AWT Image und die Skalierung! AWT, Swing, JavaFX & SWT 3
L JPanel als Image speichern AWT, Swing, JavaFX & SWT 3
Developer_X Image Texels filtern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben