Image aus jar laden (dieses mal awt)

Status
Nicht offen für weitere Antworten.

rocknralle

Mitglied
hallo leute,

mir ist bewusst, dass das thema evtl. nerven könnte, aber
ich suche schon seit wochen verzweifelt nach einer lösung. und zwar:

wie ich dieses Frame als .jar-datei starten kann, in dem dann das image
(bild.gif) angezeigt wird. leider habe ich nichts im netz gefunden was
mir weiterhilft. habe schon diverse seiten, darunter auch zahlreiche foren, durchsucht...

bin zwar nicht vom fach, habe aber trotzdem nach langem tüfteln es geschafft
ein jar-archiv zu erstellen. (bin also noch anfänger!)


in meinem jar-archiv befinden sich folgende 6 dateien:

.classpath
.project
AWTFrame04$1.class
AWTFrame04.class
MANIFEST.mf
bild.gif


im manifest steht folgendes geschrieben:

> Manifest-Version: 1.0
> Created-By: 1.6.0_06 (Sun Microsystems Inc.)
> Main-Class: AWTFrame04
>


hier der quelltext:
[Java]
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;

public class AWTFrame04 extends Applet{

Image image;

public void init(){

URL url = getClass().getResource("bild.gif");
image=getToolkit().getImage(url);
}


public void paint(Graphics g){
g.drawString("wo ist das Bild???",20,10);
g.drawImage( image ,20,20,this);
}


public static void main(String[] args){

Frame f = new Frame("Ein Frame mit Applet");
AWTFrame04 af = new AWTFrame04();

af.init();
af.start();
f.add(af);
f.setSize(400,200);
f.setVisible(true);

f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
[/Java]


das komische an der sache ist, dass das frame in eclipse wunderbar funktioniert;
-jedoch nicht als jar.-file. die selben ergebnisse habe ich auch schon mit:

[Java]
image = Toolkit.getDefaultToolkit().createImage(
getClass().getClassLoader().getResource("bild.gif"));
[/Java]
oder
[Java]
image = Toolkit.getDefaultToolkit().getImage(
getClass().getResource("bild.gif"));
[/Java]

erreicht.

sobald ich das jar per kommandozeile starte bekomm ich folgende exception:

java.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection<Unknown Source>
at sun.awt.image.URLImageSource.getDecoder<Unknown Source>
at sun.awt.image.InputstreamImageSource.doFetch<Unknown Source>
at sun.awt.image.ImageFetcher.fetchloop<Unknown Source>
at sun.awt.image.ImageFetcher.run<Unknown Source>
 
hi, bin auch anfänger. also keine garantier für richtige tipps aber vielleicht hats was mit dem pfad zu tun? bekommst eine fehlermeldung? hast das schon mit ./bild.gif bzw. .\bild.gif probiert? lg.

edit: uups: fehlermeldung hab ich übersehn...
 
weil du meinst in eclipse funktionierts - du könntes mit eclipse ein jar datei generieren und schaun was dann im manifest steht was eclipse generiert...
 
als ich das ausprobiert habe, hat eclipse das .gif nicht mit im jar verpackt. habe das jar über DOS erstellt. muss im Manifest was über das gif stehen?
 
wenn das eclipse jar funktioniert würd ich mir die ordnerstruktur anschauen - also wo im eclipse das jar-file liegt das funktioniert und wo das bild.gif liegt - dann die ordnerstruktur des im dos erstellten programms anschaun... - glaub eigentlich nicht das das im jar stehn soll / muss - sollt ja auch gehn wenn das bild z.b. auf einem externen server liegt oder so - deswegen die vermutung mit der pfadangabe.

hatte das problem mal mit externen jar-dateien die mein jar verwendet - die eclipse jar datei - also die externen jars müssen definitiv im manifest stehn - hat licht ins dunkle gebracht... war ein pfadproblem....
 
aber ich bekomm das gif mit eclipse einfach nicht mit ins jar-file exportiert, alles andere ist aber vorhanden. (wenn ich also das mit eclipse erstellte jar extrahiere, ist "bild.gif" nicht im ordner enthalten). ich habe schon alle häkchen markiert usw. und das gif wird einfach nicht übernommen. :bahnhof: ???
somit läuft das jar auch nicht so wie ich es gerne hätte...

aber wenn ich das jar mit hilfe von DOS verpacke, liegt das gif direckt neben "AWTFrame04.class" somit müsste doch eigentlich der pfad stimmen; -oder habe ich da etwas total falsch verstanden?
 
Zuletzt bearbeitet:
das hab ich im internet noch gefunden...

URL bildURL = getClass().getResource("/bild.gif");
aLabel.setIcon(new ImageIcon(bildURL));
 
ich bekomm bei deinem code wenn ihc das im eclispe ausprobier

Java:
java.lang.NullPointerException
	at sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:832)
	at sun.awt.SunToolkit.getImage(SunToolkit.java:889)
	at AWTFrame04.init(AWTFrame04.java:17)
	at sun.applet.AppletPanel.run(AppletPanel.java:424)
	at java.lang.Thread.run(Thread.java:619)

bei dir funktionierts ??? wo liegt dein bild gif genau im projektverzeichznis?
 
hm... weiß net, kann man "label" in paint wie "image" verwenden?
wenn ich mich nicht täusche war ImageIcon ein swt befehl... ich denke, das hilft mir leider momentan nicht viel.

das gif liegt bei mir im verzeichnis direkt neben "AWTFrame04.class"
(bei mir läuft das Frame als jar, bis auf das image)
 
Zuletzt bearbeitet:
Bevor wir hier weiter machen, sollten wir erst mal klären, ob du ein Applet, eine Applikation oder eine Hybrid-Anwendung schreiben willst.

BTW: setIcon() ist eine Swing-Methode, die gibts bei einem Label nicht.
 
Hast du das Bild beim kompilieren mit dem javac mit
Code:
-sourcepath Bild.gif
angegeben?
War nämlich bei mir mal der Fehler
 
verdammt! das wars!!!! ich bin dir unendlich dankbar!!!!!!! :toll:

ich dachte immer wenn ich mit:

[Java]
jar -cvfm JARName.jar Manifest.txt *.*
[/Java]

das archiv erstelle würde er automatisch das gif erkennen. habs jetzt so gemacht (für alle die auch endlos am suchen sind):

[Java]
jar -cvfm JARName.jar Manifest.txt -sourcepath bild.gif *.*
[/Java]

dann gehts. nochmals 1000 dank!!!
 
Zuletzt bearbeitet:
Der Vollständigkeit halber hier noch die Hybrid-Anwendung, weil umsonst will ich das nicht gemacht haben. Vielleicht brauchts ja nochmal jemand.

Angehängt ist ein Archiv mit einer Jar-Datei, die als AWT-Applikation per Doppelklick läuft und als Applet mit der mitgelieferten HTML-Datei. Das angezeigte Bild sowie der Quellcode liegt in der Jar-Datei.
Zum Kompilieren hatte ich eine Version von Java 1.6, dementsprechend ist eine passende JRE notwendig.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben