ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
4515
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Avatar von Atlanx
    Atlanx ist offline Mitglied Bronze
    Registriert seit
    Jul 2004
    Ort
    Bayern
    Beiträge
    32
    Hallo an alle.

    Ich versuche jetzt seit 2 Tagen mein Projekt in ein ausführbares JAR-File zu packen.
    [Eclipse 3.0, Java 1.4.2_04]
    Ersteinmal die gute Nachricht: In Eclipse lässt es sich wunderbar ausführen.

    Also, Eclipse scheint nicht fähig zu sein damit ein ausführbare JAR-File zu erstellen
    und natürlich hab ich auch schon die Beiträge in diesem Forum dazu gelesen und mich mit Google vergnügt, aber das hat mich leider auch nicht weiter gebracht.

    Also, ich hatte 2 Möglichkeiten:
    1: Von Hand mit einem Manifest
    2. Per ANT mit einem build.xml
    ( Anleitung hier im Forum )

    Ich hab mich jetzt für die 1 entschieden, da 2 zwar wunderschön ohne Fehler kompiliert, aber dann trotzdem nicht funktioniert und die Fehlermeldung keine Anhaltspunkte liefert (Fatal Exception occured).

    So, ersteinmal die Struktur meines Projektes:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    Transviewer 
         | 
         | -- doc
         | -- bin
         | -- meta -- manifest.mf
         | -- src
               |
               | -- images 
               | -- de
                      | -- transview 
                                 |
                                 | -- test2.java
                                 | -- helpfile.html
                                 | -- trans.ini

    Inhalt der manifest.mf
    Code :
    1
    2
    
    Manifest-Version: 1.0
    Main-Class: de.transview.test2

    Die Klasse test2.java enhält alle Methoden und die Mainklasse:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    "Auszug":
     
    package de.transview;
     
    import  java................
     
    public class test2 extends JFrame implements ActionListener { ..


    Also, bin jetzt in das src Verzeichnis gewechselt und hab das ganze mal übersetzt:

    javac de/transview/test2.java

    Dann das JAR-File erzeugt:

    jar cvfm transview.jar ../meta/manifest.mf de images

    Dann nach D:\ kopiert und ausgeführt:

    java -jar transview.jar

    Folgende schöne Fehlermeldung erscheint:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    B:class de.transview.test2
    A:jar:file:/D:/transview.jar!/images/icon16x16.png
    Exception in thread "main" java.lang.NullPointerException
            at javax.swing.ImageIcon.<init>(Unknown Source)
            at de.transview.MyMenu.<init>(test2.java:2782)
            at de.transview.test2.<init>(test2.java:278)
            at de.transview.test2.main(test2.java:223)

    A und B hab ich zur Fehlersuche eingebaut, wobei
    B: von
    Code :
    1
    
    System.out.println("B:"+ getClass());
    A: von
    Code :
    1
    
    System.out.println("A:"+ getClass().getResource( "/images/icon16x16.png") );
    kommt.
    Also, wie gesagt, unter Eclipse kann ich damit ohne Probleme auf die Bilder zugreifen, aber sobald die in dem JAR-File stecken, findet das Javaprogramm die anscheinend nicht mehr.
    Man beachte das schöne ! zwischen .../transview.jar!/images....

    Wie kann ich auf die Bilder zugreifen, wenn sie im JAR-File drin sind?

    Wenn Du einen Vorschlag hast, und sei er noch so klein oder abwegig. Bitte schreib
    ihn hier rein. Ich weiß jetzt jedenfalls nicht mehr weiter.

    MfG Atlanx
    Geändert von Atlanx (30.07.04 um 11:02 Uhr)
     

  2. #2
    Avatar von Atlanx
    Atlanx ist offline Mitglied Bronze
    Registriert seit
    Jul 2004
    Ort
    Bayern
    Beiträge
    32
    Ich habs gefunden.

    Es funktioniert so, wie ich es beschrieben hab.
    Nur hatte sich in einem
    Code :
    1
    
    getResource( "/images/icon16x16.png") )
    ein großes C (iCon) statt einem kleinen c(icon) eingeschlichen.

    Eclipse und Java hat das nicht gestört, aber als JAR gings dann halt nicht mehr.

    Und mit dem XML-File und ANT geht es jetzt auch zum übersetzen. Yeah!
    Geändert von Atlanx (30.07.04 um 08:33 Uhr)
     

  3. #3
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    10.222
    Hallo!

    Hier hatte ich mal ein Beispiel dazu gemacht...

    http://www.tutorials.de/tutorials157762.html

    Gruß Tom
     

  4. #4
    Avatar von Atlanx
    Atlanx ist offline Mitglied Bronze
    Registriert seit
    Jul 2004
    Ort
    Bayern
    Beiträge
    32
    So, Bilder und HTML-File gehen, aber ich müsste auch noch ein Iniffile
    aus src -- de -- transview -- trans.ini
    einlesen.

    Allerdings kann RandomAccessFile() nichts mit der URL anfangen, die
    getClass().getResource( "/de/transview/trans.ini") liefert.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      String inipath = getClass().getResource("/de/transview/trans.ini").toString();
      
      // liefert:  jar:file:/D:/Documents%20and%20Settings/../transview.jar!/..../trans.ini
     
      File x = new File( inipath );
     
     try {
              RandomAccessFile f = new RandomAccessFile( x , "r");  
    ....

    und
    Code :
    1
    2
    
     System.out.println( (getClass().getResource("/de/transview/trans.ini")).getFile() );
    //liefert:  /D:/Documents%20and%20Settings/../transview.jar!/..../trans.ini

    Funktioniert auch nicht.

    Unter anderem funktioniert es wahrscheinlich wegen den %20 nicht.

    Wie komme ich an einen Pfad in diesem JAR-File heran, der sowohl unter Win als auch Unix funktioniert?


    MfG Atlanx.
    Geändert von Atlanx (30.07.04 um 11:31 Uhr)
     

  5. #5
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    10.222
    Hallo!

    Das Problem hast du schon richtig erkannt.
    Es liegt an den Leerzeichen innerhalb des Pfadnamens.

    Es sieht jedoch ganz danach aus, als ob das ein wohlbekannter JDK 1.4 Bug wäre ... http://bugs.sun.com/bugdatabase/view...bug_id=4257660

    -> http://onesearch.sun.com/search/deve...e+in+file+path

    http://forum.java.sun.com/thread.jsp...&thread=363990

    Versuch mal mit den dort vorgeschlagenen Tipps.

    Gruß Tom
     

  6. #6
    Avatar von Atlanx
    Atlanx ist offline Mitglied Bronze
    Registriert seit
    Jul 2004
    Ort
    Bayern
    Beiträge
    32
    Danke für die Links.

    Ich hab jetzt also den Pfad mit URLDecoder.decode() dekodiert.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     String inipath_in = getClass().getResource("/de/transview/trans.ini").toString();
     File x = new File( inipath_in );
            
      // URL decoden
      // Bug in Java bis mindestens 1.4             
      String inipath_use = java.net.URLDecoder.decode( inipath_in );
      System.out.println("|T|"+ inipath_in );
      System.out.println("|L|"+ inipath_use + "\n" );
       
      try {
             RandomAccessFile f = new RandomAccessFile( inipath_use , "r"); 
    ....
    Ausgabe:
    Code :
    1
    2
    3
    4
    
    |T|jar:file:/D:/Documents%20and%20Settings/TAMA/My%20Documents/Eclipse_Workspace/Transviewer/bin/de/transview/trans.ini
    |L|jar:file:/D:/Documents and Settings/TAMA/My Documents/Eclipse_Workspace/Transviewer/bin/de/transview/trans.ini
     
    java.io.FileNotFoundException: jar:file:\D:\Documents and Settings\TAMA\My Documents\Eclipse_Workspace\Transviewer\bin\de\transview\trans.ini (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)

    Funktionieren tut es halt immer noch nicht (-_-);

    MfG Atlanx.
    Geändert von Atlanx (30.07.04 um 14:33 Uhr)
     

  7. #7
    Avatar von Atlanx
    Atlanx ist offline Mitglied Bronze
    Registriert seit
    Jul 2004
    Ort
    Bayern
    Beiträge
    32
    So gehts:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    URL u = getClass().getResource("/de/transview/trans.ini");
    try {
                BufferedReader fileread =
                  new BufferedReader(new InputStreamReader( u.openStream() )  );
     
               String line;
                while( (line = fileread.readLine()) != null ) 
                {
                      System.out.println("out: "+line);
                }  
                fileread.close();
          }
    catch (IOException e) 
          {
                System.out.println(e);          
          }
    Geändert von Atlanx (17.10.05 um 13:30 Uhr)
     

  8. #8
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    10.222
    Hallo!

    Aber du wolltest doch ein RandomAccessFile haben oder?

    Gruß Tom
     

  9. #9
    Avatar von Atlanx
    Atlanx ist offline Mitglied Bronze
    Registriert seit
    Jul 2004
    Ort
    Bayern
    Beiträge
    32
    Hallo.

    Original geschrieben von Thomas Darimont

    Aber du wolltest doch ein RandomAccessFile haben oder?
    Nicht unbedingt. Da es ja mit RandomAccessFile nicht geht und es aber mit einem BufferedStream funktioniert ist mir das eigentlch egal, wie ich die Daten aus der Datei bekomme. Hauptsache es funktioniert.

    Jetzt müsste ich nur noch die Daten in das File zurückschreiben können.
    Das funktioniert nämlich anscheinend nicht so einfach.

    Irgendwelche Vorschläge?
     

  10. #10
    Avatar von Atlanx
    Atlanx ist offline Mitglied Bronze
    Registriert seit
    Jul 2004
    Ort
    Bayern
    Beiträge
    32
    Wollte nur noch abschliessend anmerken:

    Hab es aufgegeben, zu versuchen etwas in das File im JAR zu schreiben.
    Das geht nämlich schlich und einfach nicht, da es sich bei einem JAR ja um
    ein gepacktes Format handelt, dass als ein Filestream gespeichert ist.
    Und somit ist es auch nicht möglich etwas an eine Datei anzuhängen(etwas in
    eine Datei zu schreiben), die sich in einem JAR befindet.

    Mfg Atlanx.
     

Ähnliche Themen

  1. PostMessage nur einmal ausführbar
    Von tfBullet im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 06.01.09, 15:42
  2. Warum nur lokal ausführbar?
    Von MichiStroi im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 02.08.05, 10:48
  3. Bilder im Eclipse - Package
    Von downset04 im Forum Java
    Antworten: 1
    Letzter Beitrag: 04.01.05, 08:44
  4. XP: Programm nur als Admin ausführbar
    Von HPB im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 30.12.04, 23:42
  5. cmd, msconfig nicht ausführbar
    Von Pardon_Me im Forum Microsoft Windows
    Antworten: 15
    Letzter Beitrag: 17.02.04, 13:31