Eli minulla on tälläinen ongelma että en oikein löydä oikeaa tapaa tulostaa näytölle kuva Javalla.Jos joku ystävällisesti voisi kertoa miten se tehdään.Olen tekemässä pientä rooliepliä ja tarvitsisin tätä tietoa siinä aivan ehdottomasti muuten pelistä tulee hirveän sekava.
Hello!
Oletko tekemässä Applettia vaiko Applicationia..
tässä olisi Application joka lataa kuvan ja tulostaa sen..
ota helppo käyttöinen NetBeans IDE käyttöösi jos ei jo ole ja sillä kompile/run toi koodi..
laita kuva.gif build/classes hakemistoon..
jos tarvitset apua Appletin kanssa niin kysy..
käytin Java 1.4.12 JDKta kun koodasin..
//----
JariTapio / Helsinki
package components; import java.awt.Canvas; import java.awt.Dimension; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; public class myDemo extends Canvas { public myDemo() { JFrame frame = new JFrame("DamnGood-Example!"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension dim = new Dimension(); dim.width = 640; dim.height = 480; this.setSize(dim); frame.getContentPane().add(this); frame.setLocation (200,200); BufferedImage bimg = loadBImage ("/kuva.gif"); // Tämä rivi lataa kuvan muistiin.. frame.pack(); frame.setVisible(true); while ( true == true ) { try { Thread.sleep(100); } catch (InterruptedException ex) { ex.printStackTrace(); } this.getGraphics().drawImage(bimg, 0, 0, this); // Tämä rivi piirtää kuvan näytölle.. } } //--- // BufferedImage loader.. Tämä käsky lataa kuvan muistiin.. public BufferedImage loadBImage ( String resr ) { try { BufferedImage bimg; bimg = ImageIO.read(new BufferedInputStream(getClass().getResourceAsStream(resr))); return bimg; } catch (Exception e) { System.out.println("Error loading image: " + resr + " " ); System.exit(0); return null; } } //--- /** * Create the GUI and show it. For thread safety, * this method should be invoked from the * event-dispatching thread. */ public static void main(String[] args) { myDemo demo = new myDemo (); } }
(Mod. Edit. Kooditagit, eikö näistä ole ennenkin jo huomautettu? Ja vähän varovaisuutta pitkien rivien kanssa, jos saa pyytää.)
Kiitos.Ei ole ihan niin helppoa kuin luulin.No eiköh'n se tästä lähde.
Jos toteutat pelisi applettina homma helpottuu kummasti.
import java.applet.*; import java.awt.*; public class Peli extends Applet{ Image kuva; //muuttuja kuvalle public void init(){ //vastaa applicationin main-metodia kuva=getImage(getCodeBase(), "kuva.png"); //getCodeBase():lla päästään hakemaan kuvaa samasta hakemistosta, missä //class-tiedosto on repaint(); //repaint() päivittää piirtopinnan } public void paint(Graphics g){ g.drawImage(kuva, 100, 100, this); //piirretään kuva kohtaan 100,100 } }
Lisää kuvien piirrosta löytyy Sunin tutoriaaleista
Kiitos.Tuo taitaa olla hieman helpompi tapa.
Hello!
Toimikos toi Appletti koodi sulla ajossa??
mä en oo kylläkään mikään ammattilainen tän Javan kanssa, mutta,
toi getimage ainoastaan lukee siellä taustalla tota imagea, eli,
toi repaint saatetaan kutsua ennenkuin toi image on latautunut kokonaansa..
jolloinka kuva ei ehdikkään piirtyä ennen esimerkki ohjelman suorituksen loppumista..
siihen appletti koodiin on hyvä lisätä vielä..
while (kuva.getwidth()==0){};
ennen repainttia niin kuva, jos löytyy, latautuu kokonaansa ennen piirtoa..
voi myös jättää luuppiin jos kuvaa ei löydy ja myös ohjelman teho vaatimukset nousevat 100% loopin ajaksi..
taikka sitten seuraavasti/paremmin,
käytän itse seuraavaa lyhyttä koodia Appleteissa lataamaan kuvia,
koodi ei ole vielä onnistunut olemaan toimimatta..
//-------------------------------------------------- public Image _waitForImage( String filename ){ Image l_temp; MediaTracker tracker = new MediaTracker( this ); l_temp = getImage( getCodeBase(), filename ); tracker.addImage( l_temp , 0 ); try { tracker.waitForID(0); } catch ( InterruptedException e ) { } return ( l_temp ); } //--------------------------------------------------
JariTapio / Helsinki
Tuo on täysin totta.
Yritin vain pelkistää kuvan lataamiseen tarvittavaa koodia, mutta olisi tietysti ollut hyvä esitellä myös tuo sinun kertomasi "lataamisen odotus"-koodi. Omissa(melko pienissä) jutuissa, joista olen tuon jättänyt pois on homma kuitenkin toiminut melko hyvin. Kuitenkin olisi järkevää opetella oikea tyyli jo heti alussa.
kossupullo:
Ja jos kehitysympäristöä olet hakemassa, ehdottaisin vapaan lähdekoodin eclipseä.
Käytänkin Eclipseä ja hyvä onkin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.