Probleme beim Export in eine Jar Datei

haggard

Grünschnabel
Hallo,

Jetzt habe ich mein erstes Projekt erstellt und würde es gern als ausführbare JAR Datei exportieren. Dazu benutze ich, wie schon zum erstellen des Projektes ECLIPSE.

Ich habe also die Exportfunktion benutzt (bin den Anweisungen schritt für schritt gefolgt) und habe zwei JAR Dateien erzeugt. In den JAR Dateien ist ein Ordner editor bzw. viewer mit allen Klasse und ein Ordner images mit allen Bildern. Sowie ein Ordner für die Manifestdatei. Und natürlich die benutzte externe Bibliothek jdom.
Code:
Die Struktur des Projektes sieht folgendermaßen aus: 
-Projekt 
   |-Package editor 
   |        |-editor.java                //main class 
   |        |-komponente.java 
   |        |-export.java 
   | 
   |-Package viewer 
   |        |-viewer.java               //main class 
   |        |-komponente.java 
   |        |-hinweisfenster.java 
   | 
   |-images       //ein Ordner (Package) mit Grafiken die 
                  //beide Packages benutzen 
   |-jdom.jar     //eine externe Bibliothek die ich auch bei
                  //beiden benutze
Nachdem erzeugen kann ich die editor.jar sogar schon per Doppelklick starten, nur werden mir keine Grafiken angezeigt. Damit die jdom.jar auch erkannt wird, habe ich die jdom.jar selbst hinzugefügt und habe in die Manifest Datei hineingeschrieben:

Class-Path: jdom.jar

Im Prinzip habe ich das gleiche auch bei der viewer.jar gemacht, jedoch bekomme ich den Fehler, das beim ausführen die main class nicht gefunden wird (ich habe sie aber angegeben, eben genauso wie ich es bei der editor Version gemacht habe).

So sieht die Manifestdatei des Editors aus:
Manifest-Version: 1.0
Main-Class: editor.editor
Class-Path: jdom.jar

Und so die des Viewers:
Manifest-Version: 1.0
Main-Class: viewer.viewer
Class-Path: jdom.jar

1.) Was habe ich falsch gemacht, dass die Grafiken nicht angezeigt werden? Kann man die vielleicht nochmal extra (manuell) hinzufügen, sodaß sie erkannt werden?

2.) Warum funktioniert die Viewer.jar nicht, obwohl ich genauso vorgegangen bin wie bei der Editor.jar, wirde mir ein "Main class nicht gefunden" ausgegeben?

Ich hoffe ihr könnt mir mal wieder helfen!

Haggard
 
Helfer

Hi,

ich hatte dasselbe Problem. Irgendwie hat die java VM nicht meinen Ordner namens "images" im Jar-File finden können. Was ich dann gemacht habe ist folgendes:

1.)meine java Dateien in einen separaten Ordner mit dem images Verzeichnis kopiert.
2.) extern von Eclipse meine *.java Dateien kompiliert (mit javac) und dann alle mit "jar cvf deinProgramm.jar *.class *.gif *.jpg images" zur jar-Datei gepackt. Images war hier also mein Verzeichnis mit den Bildern, das somit gefunden wurde.
3.)bei mir war noch ein Nachtrag in der Manifest Datei notwendig, weil er mein Mainclass nicht gefunden hat.

Ok, vielleicht hilft das ein bisschen weiter.
 
Kleines Beispiel mit Eclipse 3.0 und Ant:

1) Wir starten eclipse und erstellen ein neues Projekt namens work4java.
2) Wir klicken mit der rechten Maustaste auf work4java und gehen auf
Properties -> Java Build Path. Dort wählen wir dann work4java im rechten Fenster-
bereich aus und klicken auf "add Folder" wo wir als Namen src eingeben und den folgenden
Message Dialog mit "yes" bestätigen. Anschließend klicken wir auf "ok".

3) Wir erstellen ein neues Package namens de.tutorials (im Src Verzeichnis)
4) Wir erstellen nun in src einen weiteres Package namens images wo wir unser Beispielbild Platzieren.
5) Nun rstellen wir im Package de.tutorials eine Klasse namens TestApp mit dem folgenden Inhalt:
Code:
package de.tutorials;

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

public class TestApp extends JFrame {

    public TestApp() {
        super("TestApp");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        ImageIcon icon = new ImageIcon(TestApp.class
                .getResource("/images/Beispiel.jpg"));
        JLabel label = new JLabel(icon);
        getContentPane().add(label);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new TestApp();
    }
}


6) Anschließend klicken wir im Package-Explorer auf unser Projekt und erstellen eine neue
Datei namens build.xml mit folgendem Inhalt:

Code:
<project default="createJar">
   <target name="createJar">
      <jar destfile="theJar.jar" basedir="bin" update="yes">
         <manifest>
	     <attribute name="Main-Class" value="de.tutorials.ImageTest"/>	
         </manifest>
      </jar>
   </target>
</project>

7) Nun klicken wir mit der rechten Maustaste auf die Datei Build.xml und wählen
run -> Ant Build aus.

Bauen lassen und fertig ist unser ausführbares Jar.
Das Jar namens theJar.jar findest du im Hauptverzeichnis des Projektes.

HTH
Gruß Tom

Im Anhang findet ihr das Beispielprojekt+bild
 

Anhänge

Zurück