Laden einer Resourcendatei innerhalb einer Datei.

Status
Nicht offen für weitere Antworten.

bugmenot

Mitglied
Hallo,
ich habe das Problem, dass eine jar-Datei welche ich aus einem Java project in Eclipse
exportiert habe, nicht funktioniert, während das Java project in Eclipse das tut.
Ich brauche zur Laufzeit den Inhalt einer xml-Datei, welche mit folgenden Zeilen geladen wird:
Code:
URL url = this.getClass().getResource("/data/simple.glade");
System.out.println(this.getClass());
if(url==null) System.out.println("url is null");

Die Ausgabe ist folgende:
Code:
$ java -jar Glade.jar 
class org.testing.Simple
Exception in thread "main" java.io.FileNotFoundException: 
Can't find the specified Glade XML file:
/home/korn/Desktop/file:/home/korn/Desktop/Glade.jar!/data/simple.glade
        at org.gnome.glade.Glade.parse(Glade.java:142)
        at org.testing.Simple.<init>(Simple.java:26)
        at org.testing.Simple.main(Simple.java:50)

Der Inhalt der jar-Datei sieht so aus (unnötige Pfade ausgeblendet):
Code:
$ unzip -l Glade.jar | grep -v gnome | grep -v freedesktop
Archive:  Glade.jar
  Length     Date   Time    Name
--------    ----   ----    ----
       57  02-23-08 20:54   META-INF/MANIFEST.MF
     1949  02-23-08 06:29   data/simple.glade
     3427  02-23-08 03:51   data/simple.glade.bak
      273  02-23-08 03:51   data/simple.gladep
      273  02-23-08 03:51   data/simple.gladep.bak
      786  02-23-08 19:19   org/testing/Simple$1.class
      944  02-23-08 19:19   org/testing/Simple$2.class
     2147  02-23-08 19:19   org/testing/Simple.class
    18620  02-23-08 04:23   typeMapping.properties
--------                   -------
  2342737                   1689 files

Und so sieht die Manifestdatei aus:
Code:
Manifest-Version: 1.0
Main-Class: org.testing.Simple

So sieht in Eclipse die Verzeichnisstruktur aus:
unbenanntfoa.png


Und folgendermaßen habe ich die jar-Datei erstellt:
 

Wildcard

Top Contributor
Der Code den du uns zeigt produziert keine FileNotFoundException, also bitte den entsprechenden Code nachreichen.
Warum bist du mit einem bugmenot account unterwegs? Gast Postings sind hier erlaubt.
 

bugmenot

Mitglied
Gast Postings sind hier erlaubt.
Ich bin begeistert, dass es solche Boards noch gibt.
Hatte mich im Eifer des Gefechts rutinemäßig gleich ans
Anmelden gemacht. ;)

Da habe ich aus versehen eine Zeile zu wenig gepostet.
Code:
glade = Glade.parse(url.getFile(), "Simple");
Die Exception wird eben geworfen, da die Datei nicht gefunden wurde.
 

Wildcard

Top Contributor
Es ist ja auch keine Datei, sondern ein Entry in einer Jar.
Du kannst aber die URL oder den InputStream für so ziemlich alles in der Java API verwenden.
 

bugmenot

Mitglied
Also ist es mit diesem Konstruktor, der den Pfad zur Datei verlangt, nicht möglich,
die xml mit in die jar-Datei zu packen?
 

Wildcard

Top Contributor
Ist Glade eine Klasse auf die du Einfluss hast?
Es gibt vermutlich keinen Grund warum sie ein File brauchen sollte.

Kannst du uns die Implementierung dahinter zeigen?
Wie wird der String verarbeitet?
 

bugmenot

Mitglied
Auf diese Klasse habe ich keinen Einfluss.
getFile() liefert übrigens den Pfad+Dateinamen als String.

//edit
Die Binaries liegen selbst in einer jar-Datei.
 

Wildcard

Top Contributor
Bugmenot hat gesagt.:
getFile() liefert übrigens den Pfad+Dateinamen als String.
Ja, ist klar, daher die ergänzung in meinem Post (kam wohl zu spät). Die Frage ist, was macht die Methode mit dem String.
new File(path) wird scheitern. Wenn es etwas ist auf das du nicht verzichten kannst, wirst du eine temporäre Kopie erstellen müssen.
 

Wildcard

Top Contributor
Mit getResourceAsStream bekommst du den InputStream.
Mit File.createTempFile() bekommst du eine Temporäre Datei.
Den InputStream mit einem FileOutputStream oder dessen FileChannel in die Datei schreiben.
Wenn du noch
tmpFile.deleteOnExit aufrufst, wird beim Programmende für dich aufgeräumt.
 

bugmenot

Mitglied
Irgendwie bin ich gerade auf dem Holzweg.

Soweit habe ich es geschrieben:
Code:
InputStream is = this.getClass().getResourceAsStream("/data/simple.glade");
		
		System.out.println(this.getClass());
		if(is==null) System.out.println("url is null");
		
		File f = File.createTempFile("simple", "glade");
		FileOutputStream os = new FileOutputStream(f);
		byte by;
		
		while(( by = (byte) is.read())!=-1) {
			os.write(by);
		}
		f.deleteOnExit();
		
		glade = Glade.parse(f.getName(), "Simple");
Ich versuche also den Inhalt des InputStreams in den OutputStream, das heißt die temporäre Datei zu schreiben.

Allerdings erhalte ich die Fehlermeldung:
Code:
Exception in thread "main" java.io.FileNotFoundException: 
Can't find the specified Glade XML file:
/home/korn/workspace/Glade/simple9326glade
	at org.gnome.glade.Glade.parse(Glade.java:142)
	at org.testing.Simple.<init>(Simple.java:38)
	at org.testing.Simple.main(Simple.java:62)
 

bugmenot

Mitglied
Eine Frage drängt sich mir noch auf.

Und zwar benutze ich Klassen aus einer anderen Library (Glade z.B.)
um diese benutzen zu können, habe ich die binaries entpackt und als
Library zum Projekt hinzugefügt, wodurch es um einige tausend Dateien
größer wurde.
Wenn ich diesen Balast allerdings weglasse und die Library an den Classpath anhänge,
dann wird wohl die Library nicht gefunden oder nicht durchsucht.

Code:
$ java -cp .:/usr/share/java/gtk-4.0.jar -jar Glade.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: org/gnome/gtk/Window$DELETE_EVENT
Diese binary ist in der Library gtk-4.0.jar an dem angegebenen Pfad enthalten.
 

Wildcard

Top Contributor
java -jar und -cp schließt sich gegenseitig aus, da der Classpath durch das Manifest der jar geregelt wird,
 

Wildcard

Top Contributor
Gar nicht. Dir bleiben in etwa folgende Optionen:
-einen Starter schreiben
-relative Pfade mit der Hoffnung das der User die jar im richtigen Verzeichnis ausführt
-Webstart
-Installer
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Aus einer Klasse eine andere laden Java Basics - Anfänger-Themen 6
C Automatisches Ausfuehren einer Funktion beim Laden eines Jar files Java Basics - Anfänger-Themen 3
Luk10 Dateipfad beim Laden einer Datei + Neue kleine Frage! Java Basics - Anfänger-Themen 11
N Nachträgliches Laden einer Klasse. Java Basics - Anfänger-Themen 6
I Probleme beim Laden einer .gif-Datei. Java Basics - Anfänger-Themen 8
G Applet in einer Application laden Java Basics - Anfänger-Themen 8
G nicht laden einer Internetseite Java Basics - Anfänger-Themen 3
M Klassen zur Laufzeit laden, aus einer jar heraus. Java Basics - Anfänger-Themen 14
G Laden und Speichern der Konfiguration einer gra. Oberfläche Java Basics - Anfänger-Themen 4
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
I Datei als Stream aus Ressource laden? Java Basics - Anfänger-Themen 2
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
K File (png) in Image laden Java Basics - Anfänger-Themen 3
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
S Bilder in .jar Datei laden Java Basics - Anfänger-Themen 10
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
S Kann keine Bilder laden? Java Basics - Anfänger-Themen 9
C Problem: PC ohne Internet und keine Möglichkeit Programme zu laden Java Basics - Anfänger-Themen 5
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
L Fehler beim laden eines Icons Java Basics - Anfänger-Themen 3
L Resourcen laden klappt nicht Java Basics - Anfänger-Themen 2
L Speichern und Laden Java Basics - Anfänger-Themen 7
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
H Image laden Java Basics - Anfänger-Themen 4
B Image laden im GridBagLayout Java Basics - Anfänger-Themen 3
D Laden und leeren von Comboboxen Java Basics - Anfänger-Themen 8
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
B Klassen Klasse dynamisch laden. Java Basics - Anfänger-Themen 8
F Daten auf Webserver laden - wiederholen bei Fehler Java Basics - Anfänger-Themen 0
S Serialisierung: Laden von Objekten - Risiken? Java Basics - Anfänger-Themen 4
R Eine Arrayliste in XML abspeichern und laden können Java Basics - Anfänger-Themen 7
J App auf einen Webserver laden Java Basics - Anfänger-Themen 14
S Gespeichertes aus ArrayList laden mithilfe der For-Schleife Java Basics - Anfänger-Themen 12
C Problem beim laden eines BufferedImage Java Basics - Anfänger-Themen 2
C Klassen aus einem Package ermitteln und per Laufzeit laden Java Basics - Anfänger-Themen 17
S LWJGL - Matrix vom Matrixstack laden Java Basics - Anfänger-Themen 3
Seikuassi Objekte in Datei reihenweise speichern/laden Java Basics - Anfänger-Themen 3
W (XML/XSL) Daten aus Eclipse in eine Klasse Laden. Java Basics - Anfänger-Themen 1
F Operatoren Enum aus Textdabei laden Java Basics - Anfänger-Themen 3
B Listener beim Laden (deserialize) wieder hinzufügen bzw. mitspeichern? Java Basics - Anfänger-Themen 3
T Android App: Laden dauert lange Java Basics - Anfänger-Themen 1
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
C Daten speichern und laden Java Basics - Anfänger-Themen 6
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
B Bilder laden und drauf zugreifen[Eclipse] Java Basics - Anfänger-Themen 9
M Datei zu DropBox laden Java Basics - Anfänger-Themen 2
M Website im Hintergrund laden Java Basics - Anfänger-Themen 5
M Icon laden und anzeigen Java Basics - Anfänger-Themen 2
L Termin in Array speichern/laden Java Basics - Anfänger-Themen 21
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
T Bild laden Java Basics - Anfänger-Themen 7
S Image in Panel laden Java Basics - Anfänger-Themen 12
L Input/Output Sortieren Speichern Laden von ArrayListe Java Basics - Anfänger-Themen 14
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
J Laden von Dateien Java Basics - Anfänger-Themen 19
K ImageIcon laden Java Basics - Anfänger-Themen 6
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
J NullPointerException bei Laden von Bilddatei Java Basics - Anfänger-Themen 16
L Applet: Laden unterbricht den Browserfokus (scrollen) Java Basics - Anfänger-Themen 2
algebraiker Nur Klassen aus einem bestimmten Jar laden Java Basics - Anfänger-Themen 16
B Std-Serialisierung - Speichern/Laden geht nur auf einem Rechner Java Basics - Anfänger-Themen 17
B Applet - Laden eines Java-Fensters bricht ab Java Basics - Anfänger-Themen 6
N Bilddatei laden Java Basics - Anfänger-Themen 42
K BufferedImage, Bilder laden Java Basics - Anfänger-Themen 15
M Webseite komplett laden Java Basics - Anfänger-Themen 4
J Erste Schritte Im Tante-Emma-Laden mehrere Artikel kaufen mit if-Abfrage Java Basics - Anfänger-Themen 24
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
S BMP Bild laden Java Basics - Anfänger-Themen 7
S Input/Output Text und Bilder laden Java Basics - Anfänger-Themen 5
M Beim Start Methode laden die Textfelder füllt Java Basics - Anfänger-Themen 5
D GUI: Panel in Panel laden Java Basics - Anfänger-Themen 10
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
S Klasse bei Laufzeit laden? Java Basics - Anfänger-Themen 2
JAVAnnik problem beim lvl laden Java Basics - Anfänger-Themen 15
J Dateien laden Java Basics - Anfänger-Themen 7
B JFrame neu laden Java Basics - Anfänger-Themen 7
S Problem beim Speichern und Laden von Daten Java Basics - Anfänger-Themen 13
D Bilder Laden, mit Eclipse ok, .jar nicht Java Basics - Anfänger-Themen 5
F Bilder aus .jar datei laden Java Basics - Anfänger-Themen 1
A Daten speichern und wieder in ein Array laden Java Basics - Anfänger-Themen 4
N Applets: Objekte vom Server laden Java Basics - Anfänger-Themen 4
L EOF handle bem Laden leerer Datei Java Basics - Anfänger-Themen 3
N Serialization, Laden klappt nicht wenn die Klasse geändert wurde Java Basics - Anfänger-Themen 3
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
B Bildinformation in ein Array laden Java Basics - Anfänger-Themen 14
R In jLable Bild aus URL laden Java Basics - Anfänger-Themen 9
K OOP Ressource/Datei mit ClassLoader laden Java Basics - Anfänger-Themen 18
R Image laden die Zweite Java Basics - Anfänger-Themen 4
R Image laden Java Basics - Anfänger-Themen 10
E Keine neuen Beiträge Mit JavaMachine Datei vom Host in den Ram des Host laden. Java Basics - Anfänger-Themen 4
Burny91 Resourcen mit relativen Pfadangaben laden Java Basics - Anfänger-Themen 2
I CSV Datei auf HTML Seite hochladen und in DB laden Java Basics - Anfänger-Themen 9
O Grafik in Frame laden Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben