Image laden funktioniert nicht!

acky

Mitglied
folgender code führt zu der fehlermeldung:

java.lang.ClassCastException: sun.awt.image.ToolkitImage
at spincontrol.Start.<init>(Start.java:68)
at spincontrol.Start.main(Start.java:115)
Exception in thread "main" java.lang.NullPointerException
at spincontrol.Start.<init>(Start.java:79)
at spincontrol.Start.main(Start.java:115)
Bild konnte nicht geladen werden!
Cause: null
Message: java.lang.ClassCastException: sun.awt.image.ToolkitImage
Class: class java.lang.ClassCastException
---------------------------------------------


kann mir jemand sagen, warum?! auch bei absolut / vollständiger pfadangabe.
(ausdokumentierte version klappt, leider aber auch nicht überall!)

danke,
acky

Code:
		Image image;
		try {
			//img = (BufferedImage) 
                        //   new ImageIcon(ImageIO.read(getClass().
                        //        getResource("startscreen.bmp")) ).getImage();
			image = getToolkit().getImage("startscreen.bmp");
			img = (BufferedImage) image;
		} catch (Exception e1) {
			System.out.println("Bild konnte nicht geladen werden!");
			System.out.println("Cause: " + e1.getCause() );
			System.out.println("Message: " + e1.toString() );
			System.out.println("Class: " + e1.getClass() );
			System.out.println("---------------------------------------------");
			e1.printStackTrace();
		}
 
Hallo!

getToolkit().getImage(...) liefert auf ein Image und kein BufferedImage.
Verwende besser die read(..) Methode der Klasse ImageIO um Bilder zu laden.

Gruß Tom
 
Thomas Darimont hat gesagt.:
Hallo!

getToolkit().getImage(...) liefert auf ein Image und kein BufferedImage.
Verwende besser die read(..) Methode der Klasse ImageIO um Bilder zu laden.

Gruß Tom

mit der read(..) Methode der Klasse ImageIO (siehe ausdokumentierte zeilen) klappt es bei mir(!), leider nicht auf dem system, auf dem es laufen soll! (java-version < 1.5 - denke, da könnte das problem liegen)
daher suche ich eine alternative möglichkeit aus einer auf der festplatte existierenden bild-datei ein bufferedImage(!) zu erzeugen bzw. zu casten - aber das funktioniert bei mir nicht so wie geplant, eben in puncto typecast versteh ich die fehlermeldungen nicht.
 
Hallo!

Die Klasse ImageIO gabs auch schon unter 1.4 ;-)

Wenn du trotzdem mit Toolkit....getImage(...) arbeiten musst, dann lade einfach mit Toolkit....getImage(...) ein Bild un speichere es in einem Image zwischen.
Anschließend erstellst du ein neues BufferedImage:
BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
danach zeichnes du das ursprüngliche Image einfach ins BufferedImage...
bi.getGraphics().drawImage(image);
fertig.

Gruß Tom
 
Thomas Darimont hat gesagt.:
Hallo!

Die Klasse ImageIO gabs auch schon unter 1.4 ;-)

Wenn du trotzdem mit Toolkit....getImage(...) arbeiten musst, dann lade einfach mit Toolkit....getImage(...) ein Bild un speichere es in einem Image zwischen.
Anschließend erstellst du ein neues BufferedImage:
BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
danach zeichnes du das ursprüngliche Image einfach ins BufferedImage...
bi.getGraphics().drawImage(image);
fertig.

Gruß Tom

das kompilieren unter jdk 1.4 hat auch funktioniert - doch die ausführung hat halt fehlermeldungen erzeugt.
brauch das bufferedImage u.a. dazu, die größe des bildes zu ermitteln - bekomme aber nach wie vor kein bufferedImage erzeugt.
die notlösung, schlicht über eine Image zu gehen:

Code:
Image i = Toolkit.getDefaultToolkit().getImage(path);
if( i == null) { System.out.println("null"); }
this.prepareImage(i, this);
w = i.getWidth(this);
h = i.getHeight(this);
System.out.println("Höhe: " + h + " - Breite : " + w );

ergibt eine höhe und breite von -1 - obwohl i != null ...

bis nen bisschen ratlos grad, weil ich keine ahnung hab, warum es so nicht .
bin für jeden tipp dankbar!

acky
 
Hallo!

Das liegt daran, dass das Image von Toolkit...getImage(...) nicht vollständig geladen wird.
Verwende einen MediaTracker um sicherzustellen,dass das Image vor dem Zugriff komplett geladen ist. Aber wie gesagt das ist "veraltete" Technik...

Gruß Tom
 
Thomas Darimont hat gesagt.:
Hallo!

Das liegt daran, dass das Image von Toolkit...getImage(...) nicht vollständig geladen wird.
Verwende einen MediaTracker um sicherzustellen,dass das Image vor dem Zugriff komplett geladen ist. Aber wie gesagt das ist "veraltete" Technik...

Gruß Tom

Code:
i = Toolkit.getDefaultToolkit().getImage(path);
MediaTracker mt = new MediaTracker(this);
mt.addImage(i,0);

while( !mt.checkID(0) ) {
      mt.waitForID(0);
}
System.out.println( mt.getErrorsAny().toString() );
			
if( i == null) { System.out.println("null"); }
w = i.getWidth(this);
h = i.getHeight(this);
System.out.println("Höhe: " + h + " - Breite : " + w );

so klappt das auch nicht, was mach ich diesmal falsch?
:confused: :confused:
 
Hallo!

Funktioniert bei mir einwandfrei:
Code:
/**
 * 
 */
package de.tutorials.training;

import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;

import javax.swing.JFrame;

/**
 * @author Darimont
 * 
 */
public class ImageDimensionExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		Image img = Toolkit.getDefaultToolkit().createImage("C:/panda.png");

		//Dummy Frame
		JFrame frm = new JFrame(); 
		//Innerhalb einer Component natürlich this... statt frm
		MediaTracker mt = new MediaTracker(frm);
		mt.addImage(img, 0);
		mt.waitForAll();

		System.out.println(img.getWidth(frm));
		System.out.println(img.getHeight(frm));
	}
}

Gruß Tom
 
Zurück