Jar Datei mit Bildern

SiDeu

Aktives Mitglied
Hallo an Alle!
Wenn ich mein Project als jar Datei exportiere (Eclipse) werden meine ganzen Bilder vom Ordner Bilder nicht angezeigt!
Ich habe schon gelesen das eine jar Datei keinen pfad mehr hat aber wenn ich die bilder in C:Bilder speichere funktioniert es doch auch mit pfad!
wenn ich die Bilder im gleichen Ordner wie die Klassen abspeicher funktioniert es zwar als jar Datei aber wenn ich dann aus eclipse heraus starte funktioniert es nicht!
Auserdem zeigt es wenn ich die exportierte jar Datei starte nur die png Dilder an aber nicht die jpg!
ich werde so langsam irre im Kopf bitte helft mir!???:L:shock:
 
Vielleicht hilf mein Blog-Eintrag weiter?

Wie darin beschrieben, rate ich, mal die JAR-Datei auszupacken. JAR-Dateien sind auch "nur" ZIP-Dateien.
Dann kannst du probieren, ob alle Dateien/Bilder drin sind, die du vermutest UND ob das Programm in ausgepackter Form läuft.
 
Hatte auch lange dieses Problem, bis ich auf eine ganz einfache Lösung gekommen bin.
Hat mich Tage der verzweiflung gekostet.

Verwende:

Java:
Image yourImage = Toolkit.getDefaultToolkit.getImage("pathtoyourImageINAJAR");

und dann musst du noch den Ordner wo die Bilder liegen, als "Source Folder" markieren. --> Rechtsklick --> use as a Source Folder oder so ähnlich.

Dann sollte es aus Eclipse und aus der Jar die Bilder laden.

Meld dich falls es nicht geht. 😛opcorn:
 
Danke schon mal im voraus !
wenn ich ""ImageIcon img = Toolkit.getDefaultToolkit.getImage("./Bilder/e-mail.png");"" eingebe dann ist getDefaultToolkit.getImage rot unterstrichen und zeigt fehler an
""getDefaultToolkit cannot be resolved or is not a field""
Das mit rechtsklick und use as a source Folder hat funktioniert
 
Zuletzt bearbeitet:
Ein auszug aus deinem code würde helfen. Oft ist es nur ein schreibfehler...

Die sache mit toolkit funktioniert bei mir nur mit image nicht mit imageicon.

Wenn es unbedingt ein icon sein muss dann schreib:

Java:
Imageicon icon = new Imageicon("yourFilePath");

Der ordner sollte trotzdem als source ordner zur verfügung stehen.
 
Hallo und danke für eure Hilfe!

Java:
     ImageIcon img = new ImageIcon("./Bilder/internet.png");
     ImageIcon img2 = new ImageIcon("./Bilder/itunes.png");
     ImageIcon img3 = new ImageIcon("./Bilder/e-mail.png");
     ImageIcon img4 = new ImageIcon("./Bilder/IMG1.png");    
     ImageIcon img5 = new ImageIcon("./Bilder/IMG10.png");
     ImageIcon img6 = new ImageIcon("./Bilder/IMG11.png");

     jl.setIcon(img);
     jl2.setIcon(img2);
     jl3.setIcon(img3);
     jl4.setIcon(img4);   
     jl5.setIcon(img5);
     jl6.setIcon(img6);

     jl.setIcon(img);
     jl2.setIcon(img2);
     jl3.setIcon(img3);
     jl4.setIcon(img4);   
     jl5.setIcon(img5);
     jl6.setIcon(img6);

     jp.add(jl);
     jp.add(jl2);
     jp.add(jl3);
     jp.add(jl4);     
     jp.add(jl5);
     jp.add(jl6);

Meine Bilder sind alle im ausgepackten Ordner enthalten!
Wie starte ich das Programm im ausgepackten Ordner?
 
Zuletzt bearbeitet:
Wie starte ich das Programm im ausgepackten Ordner?

Wie startest denn normalerweise dein Programm?

In Eclipse siehst du in der Debug-View ja den Aufruf von javaw. Diese Zeile kannst du mit rechter Maustaste anklicken und dir die Properties anzeigen lassen. Da wird dir die genaue Command-Line angezeigt, die Eclipse verwendet hat um dein Programm zu starten.

Genau dieses Kommando musst du von der Kommandozeile angeben.
 
Hallo Leute!
Ich habe mich da leider vertan!
Ich hatte einen Order der Bilder hieß auf dem Desctop und da waren die gleichen Bilder drinn wie auf den Pfaden!
Also funktioniert es natürlich nicht! Mein Fehler sorry!!!???:L;🙂oops:
 
Du musst in Eclipse den Ordner mit den Bildern und allem anderen, was du verwenden willst als Source markieren:
5919d1388070803-jar-datei-bildern-image.png
 

Anhänge

  • image.png
    image.png
    14,5 KB · Aufrufe: 28
Zuletzt bearbeitet:
Halloele,

Wenn ich kurz zusammenfassen darf was ich bis jetzt gelesen und wie ich diese Situation interpretiert habe.

1. Du moechtest dass die Bilder, die du in deinem Projekt verwendest beim Builden in das jar kopiert werden?

2. Nun hast du das Problem das dein angegebener Pfad nicht dem in deinem Projekt entspricht?

Ich hoffe dies soweit richtig verstanden zu haben. Wie turtle bereits sagte schau dir einfach Mal die neue Struktur nach dem Builden im jar an.

Jetzt wirds ein bisschen tricky, denn ich glaube ich hatte bereits ein aehnliches Problem.

Nachdem du dein Projekt gebuildet hast erhaelst du dein jar. Die Ordnerstruktur ist nun evtl. nicht mehr identisch mit der in deinem Projekt. Daraus folgt das deine angegebenen Pfade nicht mehr stimmen. Was die einfachste aller Loesungen waere ist du musst ein / vor dein Pfad setzten z.B "dies/ist/mein.png" -> "/dies/ist/mein.png ansonsten wird es dir wohl nicht erspart bleiben die files direkt aus den Path im .jar auszulesen. Ein kleiner Tip, Rueckwaertsnavigieren funktioniert hier nicht!!! Also "../" macht dich hier nicht gluecklich du kannst nur vorwaerts navigieren. Sprich die Bilder muessen im Path (Dieser Classpath hat nichts mit dem von Windows zu tun, das ist der "Hauptpfad" in deinem jar) sein. Auf diesen Hauptpfad hast du in deinem Projekt spaeter direkten Zugriff hier ein kleines Bsp. . Evtl. hilft diese ungenuegende Erklaerung in die richtige Richtung zu deuten damit du dein Problem geloest bekommst.
 
Zuletzt bearbeitet:
Danke HansimGlück auch wenn ich dadurch leider nicht weiter komme !
Die Bilder werden im Jar abgespeichert und wenn ich die jar entpacke sind die Bilder auch drin!
Wenn ich nun in dem entpackten jar file auf ein bild klicke und mir den pfad anzeigen lasse zeigt er mir den Pfad an in dem ich es entpackt habe!
Ich will ja aber das wenn ich mit doppeltklick die jar starte das die bilder dann angezeigt werden!
Wenn der pfad von den Bildern nun ein anderer ist als in meinem Projeckt wie finde ich den Pfad heraus?
Ich will den Pfad von den Bildern in der (uhnentpackten) jar angeben!
 
Zuletzt bearbeitet:
Hallo turtle das ist fast der ganze der Code

Java:
 public class Fenster2 extends JFrame
 {
	 
	 private int anzahl;
	 private Button Button;
	 public String Eingabe;
	 
   public Fenster2 ()
   {
     super("Fenster");		
     JPanel jp = new JPanel();
     jp.setLayout(null); 
//     setUndecorated(true);
     getContentPane().setPreferredSize( Toolkit.getDefaultToolkit().getScreenSize());
     pack();
     show();
 

                   ImageIcon img = new ImageIcon("./Bilder/internet.png");
	     ImageIcon img2 = new ImageIcon("itunes.png");
	     ImageIcon img3 = new ImageIcon("./Bilder/e-mail.png");
	     ImageIcon img4 = new ImageIcon("./Bilder/IMG1.png");    
	     ImageIcon img5 = new ImageIcon("./Bilder/IMG10.png");
	     ImageIcon img6 = new ImageIcon("./Bilder/IMG11.png"); 
	     ImageIcon img7 = new ImageIcon("./Bilder/IMG12.png");
	     ImageIcon img8 = new ImageIcon("./Bilder/IMG15.png"); 
	     ImageIcon img13 = new ImageIcon("./Bilder/IMG13.png");

hier lege ich nun fest was passieren soll wenn mann ein jlabel anklickt

Java:
  final JLabel jl = new JLabel();
			jl.setBounds(100, 100, 200, 200);

			Border border = BorderFactory.createLineBorder(Color.BLACK, 1); 

	        jl.setBorder(border); 

			jl.addMouseListener(new MouseAdapter() {

				public void mouseClicked(MouseEvent me) {

					String sURL = "http://google.de";
					java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
					if (desktop.isSupported(java.awt.Desktop.Action.BROWSE)) {
						try {
							java.net.URI uri = new java.net.URI(sURL);
							desktop.browse(uri);
						} catch (Exception e1) {
							System.out.println(e1);
							e1.printStackTrace();
						}
					}

					System.out.println("Wurde geklickt...");

				}
			});

hier setze ich nun die Images auf di jlabels

Java:
jl.setIcon(img);
	     jl2.setIcon(img2);

hier adde ich nun die jlabels auf die jpanels

Java:
jp.add(jl);
	     jp.add(jl2);
	     jp.add(jl3);

hier mache ich nun das Fenster

Java:
public static void main(String[]args)
	   {
	     Fenster2 ml = new Fenster2 ();
	     ml.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	     ml.setVisible(true);
	     ml.setResizable(false);
	     ml.setLocationRelativeTo(null); 

	   }
	 }
 
Zuletzt bearbeitet:
Ich rate dir mal meinen Blog-Eintrag durchzulesen.

Ich habe nur kurz in dein Programm geschaut und mir sind mehrere Dinge aufgefallen.

Erstens setzt du die Controls (Labels) ohne Layout-Manager. Dies macht man nicht da es sehr sehr schwer ist, das zu verwalten. Ich habe das mal geändert und zumindest alle drei Labels auf ein JPanel gesetzt mit GridBaglayout. (Eigentlich nehme ich immer jgoodies-Formlayout, wollte es aber nicht auch noch ändern).

Weiterhin erbst du von JFrame und das mache ich praktisch nie. Du überschreibst nämlich NICHTS von JFrame sondern setzt nur gewisse Eigenschaften, also keinen Grund von JFrame zu erben. Ich erbe aber von JPanel, denn du setzt ja diverse Controls (Labels) auf dem JPanel und überschreibst das Verhalten, wenn man auf eins klickt.

Du hast diverse Bildchen (IMG*.png) überhaupt nicht in der JAR-Datei drin, also können diese auch nicht angezeigt werden.

Natürlich, und das ist der grösste Fehler, willst du Bilder so laden
Java:
new ImageIcon("./Bilder/e-mail.png");
Das geht nicht, wie im Blog beschrieben, aus einer JAR-Datei heraus. Daher solltest du die Bilder über den ClassPath lade
Java:
new ImageIcon(Fenster2.class.getResource("/images/itunes.png")
Dieses geht immer, wenn der ClassPath richtig gesetzt ist, also auch innerhalb einer JAR.

Ich habe mal meinen Source beigefügt, indem die gröbsten Dinge geändert wurden Und meine JAR habe ich auch angehängt und einen Screenshoz wie es bei mir aussieht.

PS: Ach ja, noch etwas...
Ich bin auch Anhänger von clean-code und meine,dass ein Programm LESBAR sein muss. Daher sind beispielsweise Variablen wie jl2 oder jL1 mir ein Graus. Was spricht dagegegen
die Variable lblInternetImage oder lblTunesImage zu nennen? Dann wissen wir und auch du noch in zwei Tagen, wofür das Label da ist.
Zeilen wie diese
Java:
	System.out.println(e1);
	e1.printStackTrace();
sind ebenfalls Unfug
Java:
e1.printStackTrace();
reicht vollkommen.
Java:
package test;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Fenster2 extends JPanel {

	private int anzahl;
	public String Eingabe;

	public Fenster2() {
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[] { 1, 1, 1, 0 };
		gridBagLayout.rowHeights = new int[] { 1, 0 };
		gridBagLayout.columnWeights = new double[] { 0.0, 0.0, 0.0,
				Double.MIN_VALUE };
		gridBagLayout.rowWeights = new double[] { 0.0, Double.MIN_VALUE };
		setLayout(gridBagLayout);
		final JLabel lblInternetImage = new JLabel();

		lblInternetImage.addMouseListener(new MouseAdapter() {

			public void mouseClicked(MouseEvent me) {

				String sURL = "http://google.de";
				java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
				if (desktop.isSupported(java.awt.Desktop.Action.BROWSE)) {
					try {
						java.net.URI uri = new java.net.URI(sURL);
						desktop.browse(uri);
					} catch (Exception e1) {
						System.out.println(e1);
						e1.printStackTrace();
					}
				}

			}
		});
		lblInternetImage.setIcon(new ImageIcon(Fenster2.class
				.getResource("/images/internet.png")));

		GridBagConstraints gbc_jl = new GridBagConstraints();
		gbc_jl.anchor = GridBagConstraints.NORTHWEST;
		gbc_jl.insets = new Insets(0, 0, 0, 5);
		gbc_jl.gridx = 0;
		gbc_jl.gridy = 0;
		add(lblInternetImage, gbc_jl);
		final JLabel lblTunesImage = new JLabel();
		lblTunesImage.setIcon(new ImageIcon(Fenster2.class
				.getResource("/images/itunes.png")));
		GridBagConstraints gbc_jl2 = new GridBagConstraints();
		gbc_jl2.anchor = GridBagConstraints.NORTHWEST;
		gbc_jl2.insets = new Insets(0, 0, 0, 5);
		gbc_jl2.gridx = 1;
		gbc_jl2.gridy = 0;
		add(lblTunesImage, gbc_jl2);
		final JLabel lblEmailImage = new JLabel();
		lblEmailImage.setIcon(new ImageIcon(Fenster2.class
				.getResource("/images/e-mail.png")));
		GridBagConstraints gbc_jl3 = new GridBagConstraints();
		gbc_jl3.anchor = GridBagConstraints.NORTHWEST;
		gbc_jl3.gridx = 2;
		gbc_jl3.gridy = 0;
		add(lblEmailImage, gbc_jl3);
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame("Fenster");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Fenster2 fenster2 = new Fenster2();
		frame.add(fenster2);
		frame.pack();
		frame.setVisible(true);

	}
}
 

Anhänge

  • Fenster.jpg
    Fenster.jpg
    28,9 KB · Aufrufe: 22
  • fenster.jar
    fenster.jar
    159,5 KB · Aufrufe: 4
Zuletzt bearbeitet:
Hallo turtle
Ich wünsche noch ein frohes neues (auch wenn es bissle spät ist war aber nicht daheim!)

Ich habe mal deinen code komplett kopiert (und abgeändert von Fenster 2 auf Fenster 3) um zu schauen ob es bei mir auch funktioniert!
Leider tut es das nicht!
Deine jar funktioniert super bei mir!
Habe ich in der Baumstruktur einen Fehler??
 

Anhänge

  • 07-01-2014 07-36-27.png
    07-01-2014 07-36-27.png
    7,9 KB · Aufrufe: 21
Bei mir sind in der entpackten jar Datei die Meta-inf , test , und die Bilder
Bei dir sind in der entpackten jar Datei die Meta-inf , test , und der Ordner Images wo die Bilder drin sind!
Ich bekomme einfach den Ordner Images nicht in die (entpackte) jar Datei er macht die Bilder einfach immer direckt hinein!???:L
 

Anhänge

  • 08-01-2014 07-34-19.png
    08-01-2014 07-34-19.png
    32,1 KB · Aufrufe: 23
  • 08-01-2014 07-35-21.png
    08-01-2014 07-35-21.png
    15,9 KB · Aufrufe: 23
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben