Thursday 15 September 2011

java - Trying to cast an Image to a BufferedImage -



java - Trying to cast an Image to a BufferedImage -

i'm writing java code game , when creating health bars saw exception confused me greatly. code , stack below:

code:

package com.teamanubiz.pixelhero; import java.awt.graphics; import java.awt.image; import javax.imageio.imageio; import javax.swing.imageicon; import java.awt.image.bufferedimage; import java.io.file; import java.io.ioexception; import com.teamanubiz.gameapi.gfx.sprite; public class guirenderlayer { public void renderstatbar(guiposition pos, graphics g, int health, int maxhealth, int mana, int maxmana) { sprite healthbar = null; seek { healthbar = new sprite(imageio.read(new file("res\\gui\\bar.png"))); } grab (ioexception e2) { // todo auto-generated grab block e2.printstacktrace(); } healthbar.crop(0, 0, 128, 32); healthbar.scale(256, 32); sprite manabar = null; seek { manabar = new sprite(imageio.read(new file("res\\gui\\bar.png"))); } grab (ioexception e1) { // todo auto-generated grab block e1.printstacktrace(); } manabar.crop(0, 32, 128, 32); manabar.scale(265, 16); sprite temp = null; seek { temp = new sprite(imageio.read(new file("res\\gui\\bar.png"))); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } temp.crop(0, 64, 128, 32); temp.scale(256, 32); sprite emptyhealth = new sprite(temp.getcurrent()); temp.scale(256, 16); sprite emptymana = new sprite(temp.getcurrent()); if (pos == guiposition.bottom) { double percent_h = health / maxhealth; double percent_m = mana / maxmana; healthbar.crop(0, 0, (int) ((int) 256 * percent_h), 32); manabar.crop(0, 0, (int) ((int) 256 * percent_m), 16); g.drawimage(emptymana.getcurrent(), 100, 464, null); g.drawimage(emptyhealth.getcurrent(), 100, 432, null); g.drawimage(healthbar.getcurrent(), 100, 432, null); g.drawimage(manabar.getcurrent(), 100, 464, null); } } }

this class referencing custom library containing class sprite. reason says trying cast toolkitimage bufferedimage in below method of sprite.java.

public void crop(int xoffset, int yoffset, int width, int height) { bufferedimage temp = (bufferedimage) source; temp = temp.getsubimage(xoffset, yoffset, width, height); source = temp; }

the variable source instance of image field in sprite.java

the stack below claims creating toolkitimage despite fact new imageicon("res\\gui\\bar.png").getimage() returns image. not convert image toolkitimage ever in code. makes extremely confusing.

stacktrace:

exception in thread "awt-eventqueue-0" java.lang.classcastexception: sun.awt.image.toolkitimage cannot cast java.awt.image.bufferedimage @ com.teamanubiz.gameapi.gfx.sprite.crop(sprite.java:48) @ com.teamanubiz.pixelhero.guirenderlayer.renderstatbar(guirenderlayer.java:55) @ com.teamanubiz.pixelhero.gamewindow.tick(gamewindow.java:14) @ com.teamanubiz.gameapi.display.paint(display.java:95) @ javax.swing.repaintmanager$4.run(unknown source) @ javax.swing.repaintmanager$4.run(unknown source) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(unknown source) @ javax.swing.repaintmanager.paintdirtyregions(unknown source) @ javax.swing.repaintmanager.paintdirtyregions(unknown source) @ javax.swing.repaintmanager.prepaintdirtyregions(unknown source) @ javax.swing.repaintmanager.access$1300(unknown source) @ javax.swing.repaintmanager$processingrunnable.run(unknown source) @ java.awt.event.invocationevent.dispatch(unknown source) @ java.awt.eventqueue.dispatcheventimpl(unknown source) @ java.awt.eventqueue.access$400(unknown source) @ java.awt.eventqueue$3.run(unknown source) @ java.awt.eventqueue$3.run(unknown source) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(unknown source) @ java.awt.eventqueue.dispatchevent(unknown source) @ java.awt.eventdispatchthread.pumponeeventforfilters(unknown source) @ java.awt.eventdispatchthread.pumpeventsforfilter(unknown source) @ java.awt.eventdispatchthread.pumpeventsforhierarchy(unknown source) @ java.awt.eventdispatchthread.pumpevents(unknown source) @ java.awt.eventdispatchthread.pumpevents(unknown source) @ java.awt.eventdispatchthread.run(unknown source) exception in thread "awt-eventqueue-0" java.lang.classcastexception: sun.awt.image.toolkitimage cannot cast java.awt.image.bufferedimage @ com.teamanubiz.gameapi.gfx.sprite.crop(sprite.java:48) @ com.teamanubiz.pixelhero.guirenderlayer.renderstatbar(guirenderlayer.java:55) @ com.teamanubiz.pixelhero.gamewindow.tick(gamewindow.java:14) @ com.teamanubiz.gameapi.display.paint(display.java:95) @ javax.swing.repaintmanager$4.run(unknown source) @ javax.swing.repaintmanager$4.run(unknown source) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(unknown source) @ javax.swing.repaintmanager.paintdirtyregions(unknown source) @ javax.swing.repaintmanager.paintdirtyregions(unknown source) @ javax.swing.repaintmanager.prepaintdirtyregions(unknown source) @ javax.swing.repaintmanager.access$1300(unknown source) @ javax.swing.repaintmanager$processingrunnable.run(unknown source) @ java.awt.event.invocationevent.dispatch(unknown source) @ java.awt.eventqueue.dispatcheventimpl(unknown source) @ java.awt.eventqueue.access$400(unknown source) @ java.awt.eventqueue$3.run(unknown source) @ java.awt.eventqueue$3.run(unknown source) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(unknown source) @ java.awt.eventqueue.dispatchevent(unknown source) @ java.awt.eventdispatchthread.pumponeeventforfilters(unknown source) @ java.awt.eventdispatchthread.pumpeventsforfilter(unknown source) @ java.awt.eventdispatchthread.pumpeventsforhierarchy(unknown source) @ java.awt.eventdispatchthread.pumpevents(unknown source) @ java.awt.eventdispatchthread.pumpevents(unknown source) @ java.awt.eventdispatchthread.run(unknown source) exception in thread "awt-eventqueue-0" java.lang.classcastexception: sun.awt.image.toolkitimage cannot cast java.awt.image.bufferedimage @ com.teamanubiz.gameapi.gfx.sprite.crop(sprite.java:48) @ com.teamanubiz.pixelhero.guirenderlayer.renderstatbar(guirenderlayer.java:55) @ com.teamanubiz.pixelhero.gamewindow.tick(gamewindow.java:14) @ com.teamanubiz.gameapi.display.paint(display.java:95) @ javax.swing.repaintmanager$4.run(unknown source) @ javax.swing.repaintmanager$4.run(unknown source) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(unknown source) @ javax.swing.repaintmanager.paintdirtyregions(unknown source) @ javax.swing.repaintmanager.paintdirtyregions(unknown source) @ javax.swing.repaintmanager.prepaintdirtyregions(unknown source) @ javax.swing.repaintmanager.access$1300(unknown source) @ javax.swing.repaintmanager$processingrunnable.run(unknown source) @ java.awt.event.invocationevent.dispatch(unknown source) @ java.awt.eventqueue.dispatcheventimpl(unknown source) @ java.awt.eventqueue.access$400(unknown source) @ java.awt.eventqueue$3.run(unknown source) @ java.awt.eventqueue$3.run(unknown source) @ java.security.accesscontroller.doprivileged(native method) @ java.security.protectiondomain$1.dointersectionprivilege(unknown source) @ java.awt.eventqueue.dispatchevent(unknown source) @ java.awt.eventdispatchthread.pumponeeventforfilters(unknown source) @ java.awt.eventdispatchthread.pumpeventsforfilter(unknown source) @ java.awt.eventdispatchthread.pumpeventsforhierarchy(unknown source) @ java.awt.eventdispatchthread.pumpevents(unknown source) @ java.awt.eventdispatchthread.pumpevents(unknown source) @ java.awt.eventdispatchthread.run(unknown source)

bufferedimage type of image, image not type bufferedimage, could, example, cast bufferedimage image.

instead of using imageicon load image, utilize imageio.read, returns bufferedimage

so instead of...

sprite healthbar = new sprite((image)new imageicon("res\\gui\\bar.png").getimage()); // never instatiated toolkitimage!!!!!!!!

nb: imageicon delegates actual loading of image toolkit , wraps in icon interface

use like...

sprite healthbar = new sprite(imageio.read(new file("res\\gui\\bar.png")));

java user-interface graphics exception-handling

No comments:

Post a Comment