Image übertragen und zeichnen

fisch100

Mitglied
Ich bin nun so weit das ich nicht mehr einfache Farbblöcke haben will sondern auch etwas mehr Grafik einbringen will .. nur stoße ich hier auf ein Problem was ich mir nicht erklären kann:

Main:
Java:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends Applet implements Runnable
{
   Thread th;   
   Draw draw;   
   public Image wall1;

   public void init()
   {
     setBackground (Color.yellow);
     draw = new Draw();
     draw.init();
     
     //wall1 = getImage(getCodeBase(), "wall1.jpg");
     wall1 = getToolkit().getImage( "wall1.jpg");
     image();
   }
   
   public void start()
   {
     th = new Thread(this);
     th.start();
   }
   
   public void stop()
   {

   }
   
   public void destroy()
   {

   }
   
   
        //Image transfer

   public void image()
   {
      draw.transfer(wall1);
   }
   
   
   public void run()
   {
     Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

     while(true)
     {
       try
       {         
         repaint();
         th.sleep(draw.values.updateSpeed);
       }
       
       catch(InterruptedException ex)
       {
         //do nothing
       }
       Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
     }
   }
   

   public void paint(Graphics g)
   {
     draw.draw(g);
   }
}

Draw:
Java:
import java.applet.*;
import java.awt.*;
import java.lang.String;

public class Draw
{
  
  //images
  public Image wall1;


  
       //Transfer

  public void transfer(Image img)
  {
    wall1 = img;
  }

      // DRAW

  public void draw(Graphics g)
  {
    g.setColor(Color.yellow);
    g.drawRect(0, 0, 300, 300);
    
    //g.drawImage(wall1, 40, 40, this);
    System.out.println("wall1: " + wall1);
    
  }


}


ausgabe gibt mir nen grafikpfad wieder .... aber es ist mir nicht möglich zu zeichnen - deswegen hier auskommentiert der befehl ... nur würde ich halt gerne zeichen 😉

danke schon mal =)
 
g.drawImage(wall1,40,40,null);


wobei zum lesen des Bildes sieh dir lieber die Klasse ImageIO an. diese hat die Methode read
 
"this" auf "null" bringt nur das ich keine interpreter fehler mehr bekomme..

jedoch bleibt das bild aus ... :/

das bild wird korrekt in der main (wenn es dort gezeichnet würde) abgebildet - aber da es sonst etwas unstruktuierter wird (es ist zwar für die pro-java-leute sicher ein schönes chaos aber ich find gut 😛) will ich es eig in draw lassen.

das mit dem ImageIO hab ich nicht verstanden (aber auch nur schnell überflogen)
 
Bilder werden in Applets per getImage gelesen...

Zudem ist das Umsetzen der Priotität des Threads Blödsinn, du solltest auf das Laden der Bilder warten, Thread.sleep ist eine statische Methode und darauf sollte nicht per Instanz zugegriffen werden, und ständig das komplette Bild neu zu zeichnen ist auch keine so tolle Idee. Außerdem wäre ein Doppelbuffer oder Page Flipping echt nice.
 
Zuletzt bearbeitet:
das ist ja nur ein teil des applets - damit man nicht alles durchackern muss 😉
doppelpuffer hab ich - das zeichen ist noch nicht wirklich optimiert ... aber das kommt (ws^^) noch

aber mein problem ist das ich das bild schon in der datei draw.java (also in der class wo ich es laden will) jedoch es zeichnen kann...
alles andere zeichnet sich ohne probleme ... aber sobald ich "null" auf "this" ändere bekomm ich folgendes im compiler:

\Draw.java:305:12: cannot find symbol
symbol : method drawImage(java.awt.Image,int,int,int,int,Draw)
location: class java.awt.Graphics
g.drawImage(wall1, row * 20, col * 20, 20, 20, this);
^


g ist geladen und funkt auch bei drawString, und anderen
der befehl ist nicht verschreiben da er ja im main geht
und die parameter sollten auch richtig sein ...

ich hab echt keine ahnung was ich hier machen kann außer es in der main auszuführen :/
 
ja ich hab es vorher immer so gemacht und werd es jz auch so machen - besonders da dies geht 😉

aber ich hab im javabuch gelesen das es alternativ noch " Image image = Toolkit().getImage(datei pfad);" geht - was es auch tat ... nur halt auf die klasse selbst begrenzt.

oder ist Toolkit die class für getImage?
 

Neue Themen


Zurück
Oben