SourceCode + Bilder in EIN Jar File packen

Dieses Thema im Forum "Deployment" wurde erstellt von babuschka, 5. Jan. 2010.

  1. babuschka

    babuschka Neues Mitglied

    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?
     
  2. Wildcard

    Wildcard Neues Mitglied

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

    babuschka Neues Mitglied

    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);
     
  4. Wildcard

    Wildcard Neues Mitglied

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

    babuschka Neues Mitglied

    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:
    Code (Java):
    Icon img = new ImageIcon("Images\\Button.png");
    button.setIcon(img);
     
  6. Wildcard

    Wildcard Neues Mitglied

    Code (Java):
    Icon img = new ImageIcon(this.getClass().getResource(path));
     
  7. U2nt

    U2nt Neues 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:
    Code (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!
     
  8. babuschka

    babuschka Neues Mitglied

    vielen dank für deine antwort.

    hab das gleich einmal probiert (nur den source code geändert).
    da bekomm ich folgenden fehler:
    Code (Text):
    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 von einem Moderator bearbeitet: 10. Jan. 2010
  9. U2nt

    U2nt Neues Mitglied

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

    Wildcard Neues Mitglied

    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
     
  11. U2nt

    U2nt Neues 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.
     
  12. babuschka

    babuschka Neues Mitglied

    nein funktioniert auch mit Eclipse SDK Version: 3.5.1 nicht.

    hier mein programm:
    File-Upload.net - MyConverter.zip
     
  13. U2nt

    U2nt Neues Mitglied

    Und der Source-Code?...
    Mit dem Programm das ein Error aufruft kann ich nicht viel anfangen.
     
  14. babuschka

    babuschka Neues Mitglied

    source code ist mit dabei?
    src\*.java
     
  15. U2nt

    U2nt Neues 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:

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

    Code (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.
     
  16. babuschka

    babuschka Neues Mitglied

    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.

    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?


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

    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!
     
  17. U2nt

    U2nt Neues 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.
     
  18. babuschka

    babuschka Neues Mitglied

    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 von einem Moderator bearbeitet: 10. Jan. 2010
  19. U2nt

    U2nt Neues Mitglied

    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: 11. Jan. 2010
  20. U2nt

    U2nt Neues 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?
     
Die Seite wird geladen...