Image erzeugen

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo nochmal,

hab wieder mal so eine meiner Fragen, bin aber bis jetzt trotz recherchieren nicht darauf gekommen,
Bis jetzt habe ich meine Hintergrundbilder für ein JPanel so geladen:

Code:
Image img = getToolkit().getImage(System.getProperty("user.dir") + "\\pics\\"+ bildName);

ich möchte das Bild aber jetzt mit dem ClassLoader laden:

Code:
ClassLoader cl = this.getClass().getClassLoader();   
URL url = cl.getResource("pics/" + bildName).toString()

Meine Frage wäre jetzt, wie ich von dem URL auf ein Image- Objekt komme?

Vielen dank für die Antworten,

lg
 
Code:
ImageIO.read(getClass().getClassLoader().getRessourceAsStream("pics/" + bildName));
 
Vielen Dank für den Tipp, es funktioniert so halb,

Eins kann ich mir nicht erklären:
Ich laufe einen Vector durch und suche mir den String der einzelnen Bilder raus (Control.getStatesElementAt(i).getIcon()).
Dieses Bild sollte dann geladen werden und ich verarbeite die Bilder dann weiter.

Wenn ich statt Control.getStatesElementAt(i).getIcon() z.B.: hintergrundbild2.png, dann hab ich zwar nur dieses Bild, aber es funktioniert einwandfrei, wenn ich eben Control.getStatesElementAt(i).getIcon() schreibe, dann bekomme ich folgendes ausgegeben (in einem JTextArea) -> unten.

Kann sich das jemand erklären?

lg



Code:
protected void generatePanel()
	{
	for (int i = 0; i < Control.getStatesSize(); i++)
	    {
            if (Control.getStatesElementAt(i).getTypeElement().equals("Bilder")) 
                {
                cl = this.getClass().getClassLoader();
                try {                 
                    img = ImageIO.read(cl.getResource(Control.getStatesElementAt(i).getIcon()));    
                    } 
                catch (Exception ex) 
                    {
                    ex.printStackTrace();
                    }
// hier brauche ich die Bilder (img), die ich vorher geladen habe

Code:
hintergrundbild1.png, java.lang.IllegalArgumentException: input == null!, hintergrundbild1.png, 
java.lang.IllegalArgumentException: input == null!, hintergrundbild1.png, java.lang.IllegalArgumentException: input == 
null!, hintergrundbild2.png, hintergrundbild1.png, java.lang.IllegalArgumentException: input == null!, hintergrundbild2.png, 
hintergrundbild2.png, hintergrundbild2.png, hintergrundbild2.png, hintergrundbild2.png, hintergrundbild2.png, hintergrundbild2.png, 
hintergrundbild2.png


gehts vielleicht für den Classloader zu schnell?
 
naja, ich mache einen JFrame auf und da schreib ich den Fehlercode rein, da ich das ganze mit Webstart starte,

Kann es sein, dass der Klassloader bestimmte dateinen nicht will?

lg
 
Nein, definitiv nicht. Lass doch einfach mal das Ausgeben, was Control.getStatesElementAt(i).getIcon() zurück gibt und überprüfe ob auch der Pfad stimmt.
 
PollerJava hat gesagt.:
naja, ich mache einen JFrame auf und da schreib ich den Fehlercode rein, da ich das ganze mit Webstart starte,
Wo du das hinschreibst, spielt keine Rolle; auf jeden Fall ist der Code nicht gepostet, der den Fehlercode ausschreibt; insofern braucht es mal wieder eine Kristallkugel, um herauszufinden, wie die Ausgabe zustandekommt...

PollerJava hat gesagt.:
Kann es sein, dass der Klassloader bestimmte dateinen nicht will?
Eher unwahrscheinlich


Mach mal:
Code:
protected void generatePanel()
   {
   for (int i = 0; i < Control.getStatesSize(); i++)
       {
            if (Control.getStatesElementAt(i).getTypeElement().equals("Bilder"))
                {
                cl = this.getClass().getClassLoader();
                try {
                    String iconStr =  Control.getStatesElementAt(i).getIcon();
                    System.out.println( "iconStr:" + iconStr);                
                    img = ImageIO.read(cl.getResource(iconStr));   
                    System.out.println( "img:" + img);                
                    }
                catch (Exception ex)
                    {
                    ex.printStackTrace();
                    }

Wenn System.out.println nicht möglich ist, dann kannst du stattdessen natürlich auch
Code:
meineBesondereFehlerAusgabeDieIchWegenWebstartBrauche.machMalDiesenTextRein( "iconStr:" + iconStr);
 
Vielen Dank, ich habs, kann euch aber nicht sagen, wo das problem war, hab am Code nichts geändert, hab nur alles nochmal kompiliert, alle meine jars signiert und jetzt gehts,

Vielen Dank für die Hilfe,
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben