PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : java: bilder aus jar-file einlesen



neonknight
26-03-2003, 12:41
wie kann ich ein bild aus einem jar-file auslesen und auf einen button legen?


Image img = Toolkit.getDefaultToolkit().getImage(getClass().ge tResource("new.gif"));
JButton newButton = new JButton(new ImageIcon(img));

gibt eine herrliche nullpointer-exception...
das bild befindet sich im jar-file, worin auch die klasse untergebracht ist.

SeeksTheMoon
26-03-2003, 15:52
ich hab das so gemacht:


JLabel imageLabel = new JLabel();
try {
//System.out.println(ClassLoader.getSystemResource("logo.png").toString());
imageLabel.setIcon(new ImageIcon(ClassLoader.getSystemResource(
"logo.png")));
} catch (Exception ex) {
System.err.println(ex.getMessage());
}

Bei Dir ist das halt ein Button und kein Label, aber sonst sollte es klappen. Ich hab ziemlich lange nachgeforscht um das rauszufinden...

neonknight
26-03-2003, 15:54
hallo
das war ja nun frustrierend... seit über vier stunden habe ich an dem sch**** rumgebastelt. na ja, endlich geschafft. danke!

neonknight
27-03-2003, 18:44
gehen wir doch mal ein stückchen weiter...

theoretisch müsste das ja auch mit einem textfile gehen.

ClassLoader.getSystemResource("text.txt")
liefert eine url zurück. wie kann ich das nun den inhalt der datei als string auslesen?

anda_skoa
27-03-2003, 22:06
getResourceAsStream denke ich mal.

Ciao,
_

neonknight
28-03-2003, 13:30
non-static method getResourceAsStream(java.lang.String) cannot be referenced from a static context

was heisst das für mich? was muss ich hier ändern?



InputStream is = ClassLoader.getResourceAsStream("text.txt");

anda_skoa
28-03-2003, 17:28
Hmm, du brauchst eine ClassLoader Instanz.

Versuch es mal mit


ClassLoader loader = ClassLoader.getSystemClassLoader();


Ciao,
_

neonknight
28-03-2003, 21:41
ich habs geschafft, allerdings habe ich es ganz anders gelöst:



URL url = ClassLoader.getSystemResource("text.txt");
String s = "";
try{
BufferedReader input = new BufferedReader( new InputStreamReader(url.openStream()));
String line;
while ((line = input.readLine()) != null){
s = s + line + "\n";
}
input.close();
} catch(Exception e){ System.out.println(e); }


keine ahnung, wie das von der performance ist, aber es läuft *g*

SeeksTheMoon
01-04-2003, 16:28
hmm und wenn ich die Textdatei in einer anderen jar habe?

neonknight
01-04-2003, 17:30
dann musst du die url des anderen jar-files ausfindig machen...

URL url = ClassLoader.getSystemResource("text.txt");
gibt die url des text.txt-files im gesamtsystem wieder.

SeeksTheMoon
01-04-2003, 18:50
ich hab jetzt ein bissel gebastelt, komme aber nicht drauf.
Diese jar liegt im gleichen Verzeichnis wie die, die das Programm beinhaltet.
Ich hab also Programm.jar und Daten.jar. Wie finde ich im Programm.jar die Daten.jar, damit ich auf deren Inhalt zugreifen kann?

SeeksTheMoon
02-04-2003, 11:26
ich habs. Einfach weg von dem Ressource-Kram:



try {
this.jar = new JarFile("Data.jar");
this.entry = new ZipEntry(jar.getEntry("text.txt"));

this.input = new BufferedReader(new InputStreamReader(
jar.getInputStream(entry)));

while ((zeile = input.readLine()) != null) {
System.out.println(zeile);
}

input.close();
} catch (IOException io) {
System.err.println("Data.jar nicht gefunden " + io.getMessage());
}


Das klappt aber nur, wenn ich die Programm.jar von der Konsole starte und mich im Verzeichnis befinde, wo die beiden jars liegen; ansonsten findet er sie nicht *grr*
Wie kriege ich das denn jetzt hin? Bei Applets gibts die Methode getCodeBase() für sowas, aber wie geht das bei ner Applikation?