Multithreading in awt

Status
Nicht offen für weitere Antworten.

JFeel-x

Mitglied
Code:
import java.awt.*;
import java.awt.event.* ;
import javax.swing.*;
import java.util.Random;
class männchen_Spiel1 extends JFrame implements KeyListener,Runnable
{      
  int x = 100,y = 150,v=0,x_,y_;
  static int zahl=0;
  boolean tarn=false;
  
  Color Farbe = new Color(30,200,60);

  Random zufall = new Random();
  
  Thread t1;
  
  public static void main (String [] args)
 {
   männchen_Spiel1  s = new männchen_Spiel1 ();
   s.setSize(500,500);
   s.setVisible(true);
   s.set_v();
   WindowQuitter wquit = new WindowQuitter();
   s.addWindowListener( wquit );
 }
 public männchen_Spiel1()
{
 super("männchen_Spiel1");

 addKeyListener(this);
 } public void keyPressed(KeyEvent e){
   
  setBackGround();


   switch ( e.getKeyCode() ){
   case KeyEvent.VK_1:
   { v=1;
     zahl++;   break;
    }
   case KeyEvent.VK_2:
   { v=3;
     zahl++;   break;
    }
   case KeyEvent.VK_3:
   { v=5;
     zahl++;   break;
    }
    case KeyEvent.VK_4:
   { v=7;
     zahl++;   break;
    }
     case KeyEvent.VK_5:
   { v=9;
     zahl++;   break;
    }
     case KeyEvent.VK_6:
   { v=11;
     zahl++;   break;
    }
     case KeyEvent.VK_7:
   { v=13;
     zahl++;   break;
    }
     case KeyEvent.VK_8:
   { v=15;
     zahl++;   break;
    }
     case KeyEvent.VK_9:
   { v=17;
     zahl++;   break;
    }
     case KeyEvent.VK_0:
   { v=20;
     zahl++;   break;
    }
   }
    if ( zahl > 0 ) t1.start();

   if ( e.getKeyCode()== KeyEvent.VK_LEFT)    if(x-v>10)  x-=v;
   if ( e.getKeyCode()== KeyEvent.VK_RIGHT)   if(x+v<490)x+=v;
   if ( e.getKeyCode()== KeyEvent.VK_UP)      if(y-v>50)  y-=v;
   if ( e.getKeyCode()== KeyEvent.VK_DOWN)    if(y+v<495)y+=v;

   if ( e.getKeyCode()== KeyEvent.VK_SPACE){
              int r = Math.abs( zufall.nextInt() ) % 256;
              int g = Math.abs( zufall.nextInt() ) % 256;
              int b = Math.abs( zufall.nextInt() ) % 256;
          Farbe = new Color(r,g,b);
          System.out.println(Farbe);
   }
   if ( e.getKeyCode()== KeyEvent.VK_ENTER)
   {
      if ( tarn )tarn = false;
      else tarn = true;
   }
        if ( !tarn )
        drawPerson( x,y,0 );                    // enttarnt


     if ( e.getKeyCode()== KeyEvent.VK_ESCAPE)
     { this.dispose(); System.exit(0);  }
      movePerson( x_,y_,0 );

  }
   public void keyReleased(KeyEvent e)
   {
   drawPerson( x,y,0 );
   }
   public void keyTyped(KeyEvent e){}
    public void set_v()
    {
     final Graphics2D g = (Graphics2D) getGraphics();
      g.setColor(Color.white);
      g.fillRect(0,0,10000,10000);
      g.setColor(Color.black);
      g.drawString("Wie schnell soll sich das Männchen bewegen?",30,50);
      g.drawString("(1 = langsam,2 = etwas schneller,.,.,.,0(=10) = sehr schnell)",30,80);
      g.drawString("Leertaste = Farbwechsel(Schild)",30,150);
      g.drawString("Tarnung ein/aus = Enter.",30,480);
    }

    public void setBackGround()
   {
     final Graphics2D g = (Graphics2D) getGraphics();
      g.setColor(Color.white);
      g.fillRect(0,0,10000,10000);
    }
    public void drawPerson( int x, int y, int pause )
 {    final Graphics2D g = (Graphics2D) getGraphics();

      g.setColor(Farbe);                         //Farbe des Schildes
      g.drawOval(x-12,y-18,23,24);               // Schutzschild
      g.drawOval(x-12,y-18,24,23);               // Schutzschild
      g.setColor(Color.black);

      g.drawLine(x-3,y+3,x,y);                 //linkes Bein
      g.drawLine(x+3,y+3,x,y);                 //rechtes Bein
      g.drawLine(x,y,x,y-6);                   //Bauch
      g.drawLine(x,y-6,x-4,y-8);               //linker Arm
      g.drawLine(x,y-6,x+4,y-8);               //rechter Arm
      g.drawLine(x,y-6,x,y-12);                //Hals
      g.drawOval(x-2,y-15,4,4);

 }
    public void movePerson( int x, int y, int pause )
 {
      final Graphics2D g = (Graphics2D) getGraphics();
      g.setColor(Color.white);
      drawPerson(x,y,pause);

 }
 public void run()
 {int Kx = Math.abs( zufall.nextInt() ) % 400, // Kugel X
      Ky = Math.abs( zufall.nextInt() ) % 400;  // Kugel y
  final Graphics2D f = (Graphics2D) getGraphics();

  while( true )
  {
  f.setColor(Color.white);
   f.drawOval(Kx,Ky,7,7);
   
   if( Kx < x ) Kx++;             if( Ky < y ) Ky++;
   if( Kx > x ) Kx--;             if( Ky > y ) Ky--;
   
   f.setColor(Farbe);
   f.drawOval(Kx,Ky,7,7);
  }

 }
}
class  WindowQuitter  extends WindowAdapter
{
 public void windowClosing( WindowEvent e )
{
  System.exit( 0 );
 }
}

Hallo an alle Leser,
ich hab hier ein kleines Programm - ein Versuch ein kleines Spiel zu schreiben -
das Männchen kann schon gut vom user bewegt werden, aber der Thread lässt sich im KeyListener nicht starten.
Ich weiß zwar,dass AWT-EventQue-0 auftritt, aber nicht,wann ich den "Kugelthread" sonst starten könnte.

Danke im Voraus :)
 

Murray

Top Contributor
Was da auftritt, ist eine NullPointerException, weil versucht wird, die Variable t1 zu dereferenzieren, ob wohl dieser Variable noch kein Wert zugewiesen wurde. Es fehlt also irgendwo der Code
Code:
t1 = new Thread( this);
Weiterhin ist zu bedenken, dass man den Thread nur einmal starten darf.

Vielleicht in etwa so:
Code:
    if ( zahl > 0 ){
    	//--- Thread erzeugen, falls noch nicht vorhanden
    	if ( t1 == null) t1 = new Thread( this);
    	
    	//--- Thread starten, falls er noch nicht oder nicht mehr laeuft
    	if (!t1.isAlive()) t1.start();
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
buzzlightyeah multithreading Java Basics - Anfänger-Themen 4
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
I Threads Multithreading, Producer/Consumer, notify() Java Basics - Anfänger-Themen 6
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
kilopack15 Verzweiflung wegen Berechnung mit Multithreading Java Basics - Anfänger-Themen 1
P Multithreading in Java Java Basics - Anfänger-Themen 9
N Threads Read-Modify-Write Problem bei Multithreading (philosopher dining problem) Java Basics - Anfänger-Themen 5
R Threads Multithreading Java Basics - Anfänger-Themen 15
Z Verständnisfrage zum Multithreading Java Basics - Anfänger-Themen 3
T Threads MultiThreading NullPointerException Java Basics - Anfänger-Themen 7
K Frage bzgl. Multithreading Java Basics - Anfänger-Themen 5
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
C Multithreading, Methoden sichern Java Basics - Anfänger-Themen 5
P Hilfe bei MultiThreading; Einige Fragen. Java Basics - Anfänger-Themen 14
S OOP Multithreading Java Basics - Anfänger-Themen 5
B Multithreading Java Basics - Anfänger-Themen 5
0din Multithreading und stop Java Basics - Anfänger-Themen 5
P Singletons und Multithreading Java Basics - Anfänger-Themen 11
U Anfängerfrage - Multithreading Java Basics - Anfänger-Themen 8
H Multithreading Java Basics - Anfänger-Themen 7
M Multithreading Java Basics - Anfänger-Themen 18
I Multithreading (Prüfungsvorbereitung) Java Basics - Anfänger-Themen 6
G UI friert bei Multithreading ein Java Basics - Anfänger-Themen 3
J Multithreading mit einer TextArea Java Basics - Anfänger-Themen 29
L NullpointerException wegen wahrscheinlichem Multithreading Java Basics - Anfänger-Themen 4
Z Multithreading Java Basics - Anfänger-Themen 2
P Multithreading Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben