SourceCode + Bilder in EIN Jar File packen

babuschka

Top Contributor
Zuerst einmal die Frage ist es möglich Bilder zu einem Jar Archiv hinzuzufügen?
Mit Bildern meine ich 5 Icons (für JButtons) + eine Image (für JPanel).
Ich verwende JBuilder 2005. Ich habe ein JAR Archiv mittels Datei-Neu-Archiv-Source erstellt.
Dieses funktioniert soweit auch, allerdings nur dann, wenn die Images im richtigen Pfad sind.
bsp. ich habe die jar datei in C:\MeinProgramm\ liegen, die Images dazu sind auf C:\MeinProgramm\Images.
führe ich nun die jar datei in C:\MeinProgramm aus, so funktioniert alles einwandfrei. Führe ich die gleiche Datei in C:\ aus, so werden die Bilder nicht angezeigt (Funktion bleibt erhalten).
Deshalb meine Frage, ist es möglich EINE ausführbare Datei (aus meinem SourceCode + Bilder) zu erstellen?
 

babuschka

Top Contributor
Ja, einfach die Bilder mit ins jar packen und über den Classloader laden. Class#getResourceAsStream

und wie kann ich die bilder ins jar packen?
im jbuilder gibt es die auswahl All classes and resources, damit müssten die bilder auch mit gepackt werden.

wie verwende ich den Classloader?

derzeit sieht mein source code so aus:
Icon img = new ImageIcon("Images\\Button.png");
button.setIcon(img);
 

Wildcard

Top Contributor
Wie das beim JBuilder im Detail funktioniert kann ich dir nicht sagen.
Classloader, wie gesagt mit Class#getResourceAsStream.
 

babuschka

Top Contributor
Wie das beim JBuilder im Detail funktioniert kann ich dir nicht sagen.
Classloader, wie gesagt mit Class#getResourceAsStream.

und wie sieht der java code genau aus?

ich brauche immer ein beispiel um ihn anwenden zu können :lol:

derzeit sieht mein source code so aus:
Java:
Icon img = new ImageIcon("Images\\Button.png");
button.setIcon(img);
 

U2nt

Bekanntes Mitglied
Hab deine Lösung:
Das Eclipse Plugin "FatJar"
FatJar - Sourceforge

Installation wird da beschrieben. Einfach die Bilder in deinem Workspace in den bin Folder reinpacken, aufs Project Rechtsklick "Build FatJar..." drücken... Wie beim exportieren.
Jedoch wenn die ersten Einstellungen übernommen sind auf "Next" drücken, und dort kannste deine Bilder mit auswählen.

Habs auch selber ausprobiert! :D

Source:
Java:
import java.awt.FlowLayout;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;


public class Frame extends JFrame {
	private static final long serialVersionUID = 1L;
	
	private JButton button = null;
	private String path = "A.png";
	private Icon icon = new ImageIcon(this.getClass().getResource(path));
	
	public Frame() {
		super("Bild im Jar");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(100, 100);
		setLocationRelativeTo(null);
		setResizable(false);
		setLayout(new FlowLayout());
		
		button = new JButton();
		button.setIcon(icon);
		
		add(button);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new Frame();
	}
}

Und die Jar ist im Anhang :) Hoffe das ist das, was du suchst!
 

babuschka

Top Contributor
Hab deine Lösung:
Das Eclipse Plugin "FatJar"
FatJar - Sourceforge

Installation wird da beschrieben. Einfach die Bilder in deinem Workspace in den bin Folder reinpacken, aufs Project Rechtsklick "Build FatJar..." drücken... Wie beim exportieren.
Jedoch wenn die ersten Einstellungen übernommen sind auf "Next" drücken, und dort kannste deine Bilder mit auswählen.

Habs auch selber ausprobiert! :D

Und die Jar ist im Anhang :) Hoffe das ist das, was du suchst!

vielen dank für deine antwort.

hab das gleich einmal probiert (nur den source code geändert).
da bekomm ich folgenden fehler:
Code:
java.lang.NullPointerException
	at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
	at MyConverter.Window.Initialize(Window.java:272)
	at MyConverter.Window.<init>(Window.java:54)
	at MyConverter.MyConverter.<init>(MyConverter.java:20)
	at MyConverter.MyConverter.main(MyConverter.java:29)
Exception in thread "main"

das gleiche, wenn ich dein programm ausführe.


ich besorg mir schnell eclipse und hoffe, dass es dort funktioniert.
 
Zuletzt bearbeitet von einem Moderator:

U2nt

Bekanntes Mitglied
Müsste eigentlich funktionieren, wäre nett wenn du deinen geänderten Sourcecode mal posten würdest (falls es dann immernochnicht geht...)
 

Wildcard

Top Contributor
1. Man legt niemals Resourcen in bin ab, immer in einem source folder
2. FatJar kann nichts was Eclipse nicht von Haus aus kann, ist also obsolete
 

U2nt

Bekanntes Mitglied
Um erlich zu seien finde ich beim Exportieren via normalen eclipse export KEINE Auswahl an Bilder bzw. anderen Resourcen. Ich kann lediglich die java und jar Files mitnehmen. Das sieht in FatJar viel besser aus - meiner Meinung nach.

Gut das mit den Resources in den src Ordner sollte man machen.
-> Was man dann aber bei FatJar beachten muss, ist das man den src Ordner als neuen dir einladen muss, damit man das Bild auch bekommt.
 

U2nt

Bekanntes Mitglied
Also als erstes ist mir aufgefallen: Bilder wie "info.png" gibt es nicht, willst du aber haben in deinen java Files. ACHTUNG: Java achtet auf Groß und Kleinschreibung!

Außerdem wirste das nie jemand anderen schicken können bei dem es funktioniert (außer mit Zufall), weil nicht jeder hat den Benutzer "Admin". Geb doch das Layout relativ an und nicht absolut.

Ansonsten sind mir noch ein paar "sinnlose" Sachen aufgefallen wie:

Java:
public class MyConverter {
    public MyConverter() {
        new Window();
    }
    
    public static void main(String[] args) {
        new MyConverter(); 
    }
}

Warum nicht einfach:

Java:
public class MyConverter {
    public static void main(String[] args) {
        new Window(); 
    }
}

Achja und sorry das es so lang gedauert hat :)
-> Hab auch mit FatJar den Ordner "Images" (den Ordner würde ich auch lieber "images" nennen) in das .jar File mit einbezogen.
 

babuschka

Top Contributor
Also als erstes ist mir aufgefallen: Bilder wie "info.png" gibt es nicht, willst du aber haben in deinen java Files. ACHTUNG: Java achtet auf Groß und Kleinschreibung!

stimmt bei info und und back.png stimmt die groß und kleinschreibung nicht.
ich will die bilder nicht in meinen java files haben, sondern in einem ordner images, der im projektverzeichnis liegt.

Außerdem wirste das nie jemand anderen schicken können bei dem es funktioniert (außer mit Zufall), weil nicht jeder hat den Benutzer "Admin". Geb doch das Layout relativ an und nicht absolut.

ich versteh nicht ganz, was du damit meinst, bzw was ich ändern muss.
bezüglich layout? meinst du damit, dass ich es nicht fix für eine größe darstellen soll?


Ansonsten sind mir noch ein paar "sinnlose" Sachen aufgefallen wie:

Java:
public class MyConverter {
    public MyConverter() {
        new Window();
    }
    
    public static void main(String[] args) {
        new MyConverter(); 
    }
}

Warum nicht einfach:

Java:
public class MyConverter {
    public static void main(String[] args) {
        new Window(); 
    }
}

mein jbuilder erzeigt die main methode automatisch, deswegen hab ich nur den konstruktor geändert, seh darin aber auch kein problem?

Achja und sorry das es so lang gedauert hat :)
-> Hab auch mit FatJar den Ordner "Images" (den Ordner würde ich auch lieber "images" nennen) in das .jar File mit einbezogen.

bis jz hab ich nur die dateinamen der bilder geändert, trotzdem hat sich an der fehlermeldung nichts geändert?
ps. ich führe das programm mit eclipse aus!
 

U2nt

Bekanntes Mitglied
Das mim Konstruktor is einfach nur "überflüssiger" Code finde ich. Du hast ja ein Layout das nicht offiziell beim JRE dabei ist, also gibst du im Buildpath eine jar file an die das Layout drinne hat. Doch diesen haste Absolut festgelegt also:
C:\Dokumente und Einstellungen\Admin\..
Und nicht jeder hat zufälligerweise genau da diese jar datei :) Die solltest du also relativ zum Projekt festlegen und am besten im jar direkt mitliefern.
 

babuschka

Top Contributor
Das mim Konstruktor is einfach nur "überflüssiger" Code finde ich. Du hast ja ein Layout das nicht offiziell beim JRE dabei ist, also gibst du im Buildpath eine jar file an die das Layout drinne hat. Doch diesen haste Absolut festgelegt also:
C:\Dokumente und Einstellungen\Admin\..
Und nicht jeder hat zufälligerweise genau da diese jar datei :) Die solltest du also relativ zum Projekt festlegen und am besten im jar direkt mitliefern.

sogar hier weiß ich nicht weiter.

ich klicke rechte maustaste - buildpath - configure build path.
dort kann ich aber nur einen fixen pfad angeben und keinen relativen.



ansonsten funktioniert jz endlich das jar file erstellen. mit einer ausnahme: nur dann, wenn ich die bilder in den bin ordner ablege, sind sie im src ordner lässt sich mein programm nicht ausführen.
 
Zuletzt bearbeitet von einem Moderator:

U2nt

Bekanntes Mitglied
ansonsten funktioniert jz endlich das jar file erstellen. mit einer ausnahme: nur dann, wenn ich die bilder in den bin ordner ablege, sind sie im src ordner lässt sich mein programm nicht ausführen.

Also meinste das es komplett nicht geht wenne die im src Ordner ablagert, oder das er Sie einfach nicht im jar file mit reinnimmt. Beim Zweiten Fall sieht die Lösung so aus:

-> FatJar: ErsteBildschirm wie gewünscht ausfüllen -> Next drücken
-> Rechts auf "Add Dir..." drücken und den Src Ordner auswählen. Anschließend NUR die Bilder ausm Source Ordner nehmen (esseiden du willst auch die java files im jar).

Ich gucke mal ob ichs rasch ma hinkrieg mit dem Buildpath.
 
Zuletzt bearbeitet:

U2nt

Bekanntes Mitglied
Hey -> Ging ja schnell, bei mir funktioniert der Converter nun einwandfrei: Die Pictures werden mitgeliefert, das Layout und es wird keine Exception geliefert.

Hab die Source und das funktionierende Jar (mit FatJar erstellt) im Anhang :)

PS: Wieso setze des eigentlich aufs Windows LAF?
 

babuschka

Top Contributor
Hey -> Ging ja schnell, bei mir funktioniert der Converter nun einwandfrei: Die Pictures werden mitgeliefert, das Layout und es wird keine Exception geliefert.

Hab die Source und das funktionierende Jar (mit FatJar erstellt) im Anhang :)

PS: Wieso setze des eigentlich aufs Windows LAF?

danke, genau so hab ich mir das vorgestellt.
aber auch bei dir sind die bilder im src ordner. auch ich hbas mit fatjar erstellt.
zu der miglayout.jar, die sollte doch auch in das jar file gepackt werden, zumindest war das meine überlegung. ich will keine zusätzliche dateien, sondern wirklich nur 1 ausführbare Datei, die ich auf mehreren Rechnern ausführen kann. ich habe meine JAR Datei bereits auf anderen Rechnern (auch ohne Admin User) getestet und funktioniert einwandfrei.
was mir noch aufgefallen ist, dass meine jar datei 277kB groß ist, deine nur 155kB. Liegt vl daran, dass ich wirklich alles gepackt habe. Die 120kB machen das Kraut aber auch nicht fett.
zum Layout: Mir gefällt dieses JAVA Design einfach nicht, dunkelgraue Fenster, die violetten Markierungen, bei aktiven (im Focus ??? stehende) Buttons, ..., deshalb hab ich mich für das klassische Windows Design entschieden. Wenns da noch andere Windows Styles gibt wäre ich über jede Information erfreut.

nocheinmal vielen dank, für die Mühe, die ich euch gemacht habe :D
 

fjk88

Mitglied
habe das selbe problem.

ich hab den ganzen heutigen Tag damit verschwendet, ein ausführbares jar File zu erstellen, das sämtliche Bilder beinhaltet.
Mein Programm wurde im JBuilder geschrieben, mittlerweile habe ich mir Eclipse+FatJar herunter gleaden und es dort zum ausführen gebracht.

Nach zahlreicher Forenrecherche habe ich jz alle Lösungsvorschläge durch, trotzdem funktioniert es nicht.


Punkt1:
Bilder müssen mit
Java:
URL url = getClass().getClassLoader().getSystemResource(Filename);
img = Toolkit.getDefaultToolkit().getImage(url);
geladen werden.
In diversen Foren findet man folgende Angaben zum Filename:
  • "Images/help.png"
  • "/Images/help.png"
  • "./Images/help.png"

ich habe mir das Programm MyConverter, das hier zum Download bereitgestellt wurde, disassembliert und festgestellt Lösung 1 also ohne / zu Beginn müsste funktionieren.


Punkt2:
wo gehöhren die bilder gespeichert.
meine ordnerübersicht für mein programm sieht wie folgt aus:

2352ace14d.png



JBuilder fragt mich beim Erstellen eines Projektes nach dem Namen. Aufstellungsassistent ist der Name des Projektes, das im gleichnamigen Ordner erstellt wird. aufstellungsassistent ist der packagename.

gehört nun der Images Ordner auf die gleiche Ebene wie die Bak, Classes, SRC; in den SRC; in den CLASSES Ordner oder generell in den ersten Aufstellungsassistent Ordner?


Punkt3:


Mit JBuilder kann man eine ausführbare JAR Datei erstellen. Das klappt auch wunderbar, allerdings nur solange, solange die Bilder auf der gleichen Ebene gespeichert sind.
Mein nächster Schritt war dann, dass ich das JAR Archiv mit 7zip aufgemacht habe und die Bilder nachträglich hinzugefügt habe. Das funktioniert nicht.

Daraufhin habe ich, das in diesem Thread erwähnte Plugin FatJar in Eclipse probiert. das Archiv enthält die Bilder, es ist auch dementsprechend groß, lässt sich allerdings nicht ausführen. Damit meine ich es geschieht nichts, wenn ich auf das JarArchiv doppelklicke.
In einem anderen Forum steht geschrieben, dass man beim ausführen des FatJar Plugins einen classPath angeben muss.
jar File startet nicht - Java @ tutorials.de: Forum & Hilfe
Nur weiß ich nicht, wie das funktioniert.
 

fjk88

Mitglied
der class path unterscheidet sich je nach verwendeten programm.
jbuilder: projektname/projektname/classes
eclipse: projektname/projektname/bin

ich habe wieder mit beiden programmen ein jar archiv erstellt:
beide lassen sich nicht ausführen, deswegen habe ich in der konsole folgendes probiert:

Code:
java -jar test.jar

liefert

1. Eclipse JAR:

Code:
Exception in thread "main" java.lang.NoClassDefFoundError: D:\java-programme\eclipse\AufstellungsAssistent\bin\AufstellungsAssistent/class
Caused by: java.lang.ClassNotFoundException: D:\java-programme\eclipse\Aufstellu
ngsAssistent\bin\AufstellungsAssistent.class
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: D:\java-programme\eclipse\AufstellungsAssistent\bin\AufstellungsAssistent.class. Program will exit.


2. JBuilder JAR

Code:
jar:file:/D:/Java_Programme/AufstellungsAssistent/AufstellungsAssistent/Aufstell
ungsAssistent.jar!/feld.png
null
SaveIcon.png nicht gefunden
Exception in thread "main" java.lang.NullPointerException
        at javax.swing.ImageIcon.<init>(Unknown Source)
        at aufstellungsassistent.Einstellungen.InitButton(Einstellungen.java:114
)
        at aufstellungsassistent.Einstellungen.<init>(Einstellungen.java:68)
        at aufstellungsassistent.Fenster.<init>(Fenster.java:29)
        at aufstellungsassistent.AufstellungsAssistent.main(AufstellungsAssisten
t.java:28)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C bilder werden nicht angezeigt Tools - Maven, Gradle, Ant & mehr 3
V applet - findet Bilder nicht Tools - Maven, Gradle, Ant & mehr 5
T Bilder cachen ? Tools - Maven, Gradle, Ant & mehr 12
D Bilder werden nicht geladen Tools - Maven, Gradle, Ant & mehr 21
S bilder mit java beschreiben? Tools - Maven, Gradle, Ant & mehr 8
G rotierende Bilder im Java Applet Tools - Maven, Gradle, Ant & mehr 3
G Bilder von Server Laden Tools - Maven, Gradle, Ant & mehr 4
U Applet/Jar/Bilder Tools - Maven, Gradle, Ant & mehr 2
M bilder werden nicht angezeigt! Tools - Maven, Gradle, Ant & mehr 3
X Problem mit Bilder laden Tools - Maven, Gradle, Ant & mehr 3
J Bilder in Applets Tools - Maven, Gradle, Ant & mehr 2
N fehlende anzeige der "applet bilder" im ie Tools - Maven, Gradle, Ant & mehr 2
V bilder auf verschiedene ebenen verteilen Tools - Maven, Gradle, Ant & mehr 2
saxos1983 Fehlerüberprüfung beim Laden von Bilder Tools - Maven, Gradle, Ant & mehr 3
K Bilder in Applets laden Tools - Maven, Gradle, Ant & mehr 3
T Bilder speichern Tools - Maven, Gradle, Ant & mehr 5
H Jenkins - maven-jar-plugin - kein jar-file Tools - Maven, Gradle, Ant & mehr 38
Thallius Jenkins nur zip file erstellen? Tools - Maven, Gradle, Ant & mehr 3
S Enviroment Variable jar file Tools - Maven, Gradle, Ant & mehr 0
L Ausführbare Jar-File funktioniert nicht Tools - Maven, Gradle, Ant & mehr 15
H Eclipse/Runnable JAR file/.fxml-Datei Tools - Maven, Gradle, Ant & mehr 1
R DLL in JAR File Tools - Maven, Gradle, Ant & mehr 5
B Wie kann man unter Windows 7 file types mit Java Applikationen verknüpfen? Tools - Maven, Gradle, Ant & mehr 5
G Maven JAR-File schmeißt NoClassDefFoundError wenn /lib Verzeichnis nicht daneben entpackt wird Tools - Maven, Gradle, Ant & mehr 9
B Ant Build File, wie ist der Java3D Native Code einzubinden? Tools - Maven, Gradle, Ant & mehr 6
C Applet Öffnen eines JAR-Files im JAR-File Tools - Maven, Gradle, Ant & mehr 2
A ProcessBuilder kann nach Deployment File nicht finden Tools - Maven, Gradle, Ant & mehr 4
B Buckminster: Plugin Version in Java source File einfügen Tools - Maven, Gradle, Ant & mehr 4
B Maven deploy-file frage Tools - Maven, Gradle, Ant & mehr 6
D Java Webstart startet .jar file nicht Tools - Maven, Gradle, Ant & mehr 13
M Export von Jar File mit JDBC Treiber Tools - Maven, Gradle, Ant & mehr 2
I Ist ein Runnable Jar File Platformunabhängig? Tools - Maven, Gradle, Ant & mehr 13
grudge File in Applet laden Tools - Maven, Gradle, Ant & mehr 4
ABstraCT Passwort speichern im jar File ? Tools - Maven, Gradle, Ant & mehr 4
B Maven: file.separator und properties-Dateien Tools - Maven, Gradle, Ant & mehr 8
T eignes Tool in Ant-File Tools - Maven, Gradle, Ant & mehr 4
G ant - last modified datum aus file auslesen Tools - Maven, Gradle, Ant & mehr 7
S Applet und File-Object? Tools - Maven, Gradle, Ant & mehr 9
F jar file starten Tools - Maven, Gradle, Ant & mehr 12
T jar File im jar File Tools - Maven, Gradle, Ant & mehr 7
J keytool um für Tomcat keystore file zu erstellen Tools - Maven, Gradle, Ant & mehr 1
J Externe Dateien im jar File Tools - Maven, Gradle, Ant & mehr 4
G Jar File Java Web Start Tools - Maven, Gradle, Ant & mehr 2
G File open/save mit WebStart Tools - Maven, Gradle, Ant & mehr 3
D Properties File FileInputStream Problem Tools - Maven, Gradle, Ant & mehr 2
M datei mit html file an applet übergeben Tools - Maven, Gradle, Ant & mehr 3
F Applet erscheint bei Eclipse, aber nicht im HTML-File Tools - Maven, Gradle, Ant & mehr 2
R Slash-Probleme durch File Tools - Maven, Gradle, Ant & mehr 2
shiny_hair Fehlermeldung: URI scheme is not "file" / Verzeich Tools - Maven, Gradle, Ant & mehr 8
B File open Dialog Tools - Maven, Gradle, Ant & mehr 6
K IE + Sun PlugIn + JAR + Zugriff per file:/ geht nicht mehr Tools - Maven, Gradle, Ant & mehr 2
L Applet jar file von 1.4 und 1.1.8 Tools - Maven, Gradle, Ant & mehr 21
D Netbeans / JAR File Tools - Maven, Gradle, Ant & mehr 2

Ähnliche Java Themen

Neue Themen


Oben