fout bij timer starten

Status
Niet open voor verdere reacties.

stienoo

Gebruiker
Lid geworden
31 dec 2007
Berichten
315
De titel zegt het, als ik een timer wil starten krijg ik een fout.

De fout:

Code:
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
	at Bewegen2$TimerHandler.actionPerformed(Bewegen2.java:85)
	at javax.swing.Timer.fireActionPerformed(Unknown Source)
	at javax.swing.Timer$DoPostEvent.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

De code:

Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;

public class Bewegen2 extends Applet implements KeyListener{
    public static boolean jump = false;
    public static int x=50;
    public static int y=50;
    public static Bal bal;
	private Timer timer;
    int lengtex1[] ={0,5};
    int lengtey1[] ={0,5};
    int lengtex2[] ={0,5};
    int lengtey2[] ={0,5};
    int h=20; //hoogte cirkel
    int teller;
    
	public void init(){
        this.setFocusable(true);
        this.addKeyListener(this);
        timer = new Timer(500, new TimerHandler() );
    }
	public void paint(Graphics g){
		g.fillOval(x,y,h,h);
		g.drawLine(30,30,100,30);
	}
    public void keyTyped(KeyEvent e) {
        //dummy
    }

	@Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_DOWN){
            y+=2;
            for(int i=30;i<100;i++){
            	if((y+h)==30&&x==i){
                    y-=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_UP){
            y-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    y+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x+=2;/*
            for(int i=30;i<100;i++){
            	if(x==i){
                    x-=2;
            	}
            }
            */
        }
        if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    x+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_SPACE){
            timer.start();
        }
        repaint();
    }

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	class TimerHandler implements ActionListener{
		public void actionPerformed( ActionEvent e){
			if(teller<100){
				x++;
				bal.setbounds(x, y);
				bal.teken();
			}
			if(teller>100){
				x--;
				bal.setbounds(x, y);
				bal.teken();
			}
			if(teller==200){
				timer.stop();
			}
			teller++;
		}
	}
	
}

class Bal extends Thread{
	private Graphics g;
	private Timer timer;
	public int x, y, h, teller;
	
	
	public Bal(Graphics g, int x, int y, int h){
		this.g = g;
		this.x = x;
		this.y = y;
		this.h = h;
		
	}
		

	public void setbounds(int x, int y){
		this.x = x;
		this.y = y;
	}
	public void teken(){
		g.drawOval(x, y, h, h);
	}
	
}

*edit*

Of, kan er iemand een applet (of aplicatie) schrijven/geven waarin je kan springen (gewoon een cirkel)?
 
Laatst bewerkt:
Neem dit niet al te serieus, want ik kan het ook gewoon drastisch fout hebben,

, maar zou je niks in het object bal moeten zetten ? Je krijgt nu een Nullpointer.Exception omdat iets leeg staat.

Misschien zou je zoiets moeten doen als
Code:
public Bal bal = new Bal();


, ben een beginner met Java, dus kan het ook helemaal fout hebben, probeer alleen te helpen ^_^
 
Sowieso hetgene wat revelian zegt, je zal eerst een nieuwe bal aan moeten maken voordat je er functies uit aan kan roepen.

Daarnaast in de class Bal
Code:
class Bal extends Thread{
	private Timer timer; [COLOR="Red"]//je instantieert de timer hier niet. Vraag mij af of je die hier wel nodig bent[/COLOR]
	public int x, y, h;
	
	
	public Bal(int x, int y, int h){
		this.x = x;
		this.y = y;
		this.h = h;
	}

	public void paint(Graphics g){
               g.drawOval(x, y, h, h);
        }
	
	public void setbounds(int x, int y){
		this.x = x;
		this.y = y;
	}

Waarom maak je geen gebruik van de paintfunctie? Deze kan je van buiten de class aanroepen omdat deze public is. En dan hoef je geen functie te maken voor iets wat al bestaat :)
Daarnaast vind ik het zelf overzichtelijker om de hoofdclasses in aparte files te zetten.
Dus een aparte file voor bewegen2 en een aparte file voor bal
 
Laatst bewerkt:
Die teller is een overblijfsel van wat ik eerst had geprobeert, evenals de graphics functie, eerst had ik gemaakt dat er in de balfunctie die teller ward geactiveerd waar dan telkens die bal werd getekent, maar aangezien dat als je repaint() doet je stopt, heb ik dat niet gedaan :D

Ik ga nu nog wat sleutelen met deze tips...


*edit* het werkt!!!

Maar weet iemand hoe ik kan zorgen dat je het zwaartekracht efect krijgt? (nu gaat hij evensnel omhoog als omlaag aan een konstante snelheid)

Mijn code is nu dit: (hoe ik kan zorgen dat je niet door dat lijntje kan springen vind ik wel ;))

Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;

public class Bewegen2 extends Applet implements KeyListener{
    public static boolean jump = false;
    public static int x=50;
    public static int y=50;
    public static Bal bal = new Bal();
	private Timer timer;
    int lengtex1[] ={0,5};
    int lengtey1[] ={0,5};
    int lengtex2[] ={0,5};
    int lengtey2[] ={0,5};
    int h=20; //hoogte cirkel
    int teller;
    
	public void init(){
        this.setFocusable(true);
        this.addKeyListener(this);
        timer = new Timer(5, new TimerHandler() );
    }
	public void paint(Graphics g){
		g.fillOval(x,y,h,h);
		g.drawLine(30,30,100,30);
	}
    public void keyTyped(KeyEvent e) {
        //dummy
    }

	@Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_DOWN){
            y+=2;
            for(int i=30;i<100;i++){
            	if((y+h)==30&&x==i){
                    y-=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_UP){
            y-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    y+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x+=2;/*
            for(int i=30;i<100;i++){
            	if(x==i){
                    x-=2;
            	}
            }
            */
        }
        if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    x+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_SPACE){
            timer.start();
        }
        repaint();
    }

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	class TimerHandler implements ActionListener{
		public void actionPerformed( ActionEvent e){
			if(teller<100){
				y--;
				bal.setbounds(x, y);
				bal.teken();
			}
			if(teller>100){
				y++;
				bal.setbounds(x, y);
				bal.teken();
			}
			if(teller==200){
				timer.stop();
				teller=0;
			}
			teller++;
			repaint();
		}
	}
	
}

class Bal extends Thread{
	public int x, y, h, teller;
	
	
	Bal(int x, int y, int h){
		this.x = x;
		this.y = y;
		this.h = h;
		
	}
		

	public Bal() {
		// TODO Auto-generated constructor stub
	}


	public void setbounds(int x, int y){
		this.x = x;
		this.y = y;
	}
	public void teken(){
		repaint();
	}


	private void repaint() {
		
	}
	
}
 
Laatst bewerkt:
ik heb toen ooit een keer zoiets geprobeerd, zie bijlage. In de zip staat het jar bestand, en de java bestanden. Het springen gebeurt in JumpCheck.java met een natuurkundige formule waarmee de nieuwe snelheid wordt berekend. Ik heb voor het gemak een radiobutton gebruikt als "mannetje".
 

Bijlagen

Ja, ik heb het geprobeert en wat verwerkt maar ik krijg nog 25 fouten onderstreept door eclipse (die zet ik in het rood):

Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;

public class Bewegen2 extends Applet implements KeyListener{
	/* spring gegevens */
	double v = 10;                  //startsnelheid omhoog         
    double hV = 0;                  //hoogte voor berekening
    double hN = 0;                  //hoogte na berekening
    double m = 50;                //massa, waarde doet er niet toe
    double g = 0.25;                //op aarde 9,81; hoe hoger deze waarde
                                    //hoe lager de sprong
    double eVoor;                   
    int t = 10;                     //duur van één tijdstap
    double vV  = 0;                 //tijdelijke opslag snelheid
	boolean stop = false;
    boolean springen;
    /* einde springgegevens */
    
    public static boolean jump = false;
    public static int x=50;
    public static int y=50;
    public static int buttonYnul = 50;
    public static Bal bal = new Bal();
	private Timer timer;
    int lengtex1[] ={0,5};
    int lengtey1[] ={0,5};
    int lengtex2[] ={0,5};
    int lengtey2[] ={0,5};
    int h=20; //hoogte cirkel
	boolean repaint;
    
	public void init(){
        this.setFocusable(true);
        this.addKeyListener(this);
        timer = new Timer(5, new TimerHandler() );
        timer.start();
    }
	public void paint(Graphics g){
		g.fillOval(x,y,h,h);
		g.drawLine(30,30,100,30);
	}
    public void keyTyped(KeyEvent e) {
        //dummy
    }

	@Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_DOWN){
            y+=2;
            for(int i=30;i<100;i++){
            	if((y+h)==30&&x==i){
                    y-=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_UP){
            y-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    y+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x+=2;/*
            for(int i=30;i<100;i++){
            	if(x==i){
                    x-=2;
            	}
            }
            */
        }
        if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    x+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_SPACE){
        	springen = true;
        }
        repaint();
    }

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	class TimerHandler implements ActionListener{
		public void actionPerformed( ActionEvent e){

            if(!stop && v != 0)
            {
                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);

                vV = v;
                hN = hV + v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                y = buttonYnul - (int)hV;

                bal.setbounds(x,y);
                repaint=true;

                try
                {
                [COLOR="Red"]sleep[/COLOR](t);
                }catch(InterruptedException  [COLOR="Red"]e[/COLOR]){}

                if(!(v > -1))
                    stop = true;
            }


            v = vV;
            if(!(hN <= 0))
            {


                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);
                hN = hV - v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                y = buttonYnul - (int)hV;

                bal.setbounds(x,y);
                repaint=true;

                try
                {
                [COLOR="Red"]sleep[/COLOR](t);
                }catch(InterruptedException  [COLOR="Red"]e[/COLOR]){}
            }


			if(repaint){
				repaint();
				repaint=false;
			}
		}
	}
	
}

class Bal extends Thread{
	public int x, y, h, teller;
	
	
	Bal(int x, int y, int h){
		this.x = x;
		this.y = y;
		this.h = h;
		
	}
		

	public Bal() {
		// TODO Auto-generated constructor stub
	}


	public void setbounds(int x, int y){
		this.x = x;
		this.y = y;
	}
	public void teken(){
		repaint();
	}


	private void repaint() {
		
	}
	
}

De fout die ik krijg bij het comilen:

Code:
Exception in thread "AWT-EventQueue-1" java.lang.Error: Unresolved compilation problems: 
	The method sleep(int) is undefined for the type Bewegen2.TimerHandler
	Duplicate parameter e
	The method sleep(int) is undefined for the type Bewegen2.TimerHandler
	Duplicate parameter e

	at Bewegen2$TimerHandler.actionPerformed(Bewegen2.java:116)
	at javax.swing.Timer.fireActionPerformed(Unknown Source)
	at javax.swing.Timer$DoPostEvent.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 
Ahh jij werkt natuurlijk met applets, ik werk met een application en threads, zodat je de sleep methode kunt gebruiken.. ik weet niet of je met applets ook threads kunt gebruiken??
 
Heu, ik denk niet dat het daar aan ligt, ik heb het ook even in een aplicatie vorm gemaakt en toch krijg ik nog steed dezelvde 4 fouten:

Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;

public class bewegenaplicatie extends JFrame {

  public static void main( String args[] ) {
    JFrame frame = new bewegenaplicatie();
    frame.setSize( 400, 200 );
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setTitle( "tittel" );
    JPanel paneel = new bewegenpaneel();
    frame.setContentPane( paneel );
    frame.setVisible( true );
  }
}


class bewegenpaneel extends JPanel implements KeyListener{

	/* spring gegevens */
	double v = 10;                  //startsnelheid omhoog         
    double hV = 0;                  //hoogte voor berekening
    double hN = 0;                  //hoogte na berekening
    double m = 50;                //massa, waarde doet er niet toe
    double g = 0.25;                //op aarde 9,81; hoe hoger deze waarde
                                    //hoe lager de sprong
    double eVoor;                   
    int t = 10;                     //duur van één tijdstap
    double vV  = 0;                 //tijdelijke opslag snelheid
	boolean stop = false;
    boolean springen;
    /* einde springgegevens */
    
    public static boolean jump = false;
    public static int x=50;
    public static int y=50;
    public static int buttonYnul = 50;
    public static Bal bal = new Bal();
	private Timer timer;
    int lengtex1[] ={0,5};
    int lengtey1[] ={0,5};
    int lengtex2[] ={0,5};
    int lengtey2[] ={0,5};
    int h=20; //hoogte cirkel
	boolean repaint;
	
  public bewegenpaneel() {
      this.setFocusable(true);
      this.addKeyListener(this);
      timer = new Timer(5, new TimerHandler() );
      timer.start();
  }
  public void paintComponent(Graphics g){
	  super.paintComponent(g);
      
  }
  
  public void paint(Graphics g){
		g.fillOval(x,y,h,h);
		g.drawLine(30,30,100,30);
	}
  public void keyTyped(KeyEvent e) {
      //dummy
  }

	@Override
  public void keyPressed(KeyEvent e) {
      if(e.getKeyCode() == KeyEvent.VK_DOWN){
          y+=2;
          for(int i=30;i<100;i++){
          	if((y+h)==30&&x==i){
                  y-=2;
          	}
          }
      }
      if(e.getKeyCode() == KeyEvent.VK_UP){
          y-=2;
          for(int i=30;i<100;i++){
          	if(y==30&&x==i){
                  y+=2;
          	}
          }
      }
      if(e.getKeyCode() == KeyEvent.VK_RIGHT){
          x+=2;/*
          for(int i=30;i<100;i++){
          	if(x==i){
                  x-=2;
          	}
          }
          */
      }
      if(e.getKeyCode() == KeyEvent.VK_LEFT){
          x-=2;
          for(int i=30;i<100;i++){
          	if(y==30&&x==i){
                  x+=2;
          	}
          }
      }
      if(e.getKeyCode() == KeyEvent.VK_SPACE){
      	springen = true;
      }
      repaint();
  }

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	class TimerHandler implements ActionListener{
		public void actionPerformed( ActionEvent e){

          if(!stop && v != 0)
          {
              eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);

              vV = v;
              hN = hV + v;
              v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
              hV = hN;

              y = buttonYnul - (int)hV;

              bal.setbounds(x,y);
              repaint=true;

              try
              {
              sleep(t);
              }catch(InterruptedException e){}

              if(!(v > -1))
                  stop = true;
          }


          v = vV;
          if(!(hN <= 0))
          {


              eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);
              hN = hV - v;
              v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
              hV = hN;

              y = buttonYnul - (int)hV;

              bal.setbounds(x,y);
              repaint=true;

              try
              {
              sleep(t);
              }catch(InterruptedException e){}
          }


			if(repaint){
				repaint();
				repaint=false;
			}
		}
	}
	
}
 
je moet er dan wel een thread van maken. De sleep methode is voor die thread.
 
Heu, ik ben nog maar beginner in java, wat is een thread?
 
ik ga nu weg,, ik zal als ik terugkom wel een voorbeeldje proberen te maken hoe je het kunt doen ;)

ps. een thread is een klasse die naast een andere klasse gerunned kan worden. Normaal gesproken kun je maar 1 klasse tegelijk..
 
Ow, ja, ik weet het weer (met al die namen, zeker in het begin) ik zit net aan dat hoofdstuk in mijn boek ("en dan is er... java"), voor zo een spel heb je dat natuurlijk nodig :D

En in ieder geval bedankt, voor dat voorbeeld dat je gaat maken :D
 
Laatst bewerkt:
Heun, niet dat ik ongeduldig wil doen, maar ben je ondertussen al terug (ik zou wel graag wat voortdoen aan dat spel :D
 
je moet wel een bepaalde thread laten sleepen, waarschijnlijk kun je
Thread.sleep( n );
doen
 
Inderdaat zo word de 1ste regel niet meer fout gerekent, maar nu nog die 2de regel (ik zet het in het vet en rood: (regel 117 en 142)

Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;

public class Bewegen2 extends Applet implements KeyListener{
	/* spring gegevens */
	double v = 10;                  //startsnelheid omhoog         
    double hV = 0;                  //hoogte voor berekening
    double hN = 0;                  //hoogte na berekening
    double m = 50;                //massa, waarde doet er niet toe
    double g = 0.25;                //op aarde 9,81; hoe hoger deze waarde
                                    //hoe lager de sprong
    double eVoor;                   
    int t = 10;                     //duur van één tijdstap
    double vV  = 0;                 //tijdelijke opslag snelheid
	boolean stop = false;
    boolean springen;
    /* einde springgegevens */
    
    public static boolean jump = false;
    public static int x=50;
    public static int y=50;
    public static int buttonYnul = 50;
    public static Bal bal = new Bal();
	private Timer timer;
    int lengtex1[] ={0,5};
    int lengtey1[] ={0,5};
    int lengtex2[] ={0,5};
    int lengtey2[] ={0,5};
    int h=20; //hoogte cirkel
	boolean repaint;
    
	public void init(){
        this.setFocusable(true);
        this.addKeyListener(this);
        timer = new Timer(5, new TimerHandler() );
        timer.start();
    }
	public void paint(Graphics g){
		g.fillOval(x,y,h,h);
		g.drawLine(30,30,100,30);
	}
    public void keyTyped(KeyEvent e) {
        //dummy
    }

	@Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_DOWN){
            y+=2;
            for(int i=30;i<100;i++){
            	if((y+h)==30&&x==i){
                    y-=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_UP){
            y-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    y+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x+=2;/*
            for(int i=30;i<100;i++){
            	if(x==i){
                    x-=2;
            	}
            }
            */
        }
        if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    x+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_SPACE){
        	springen = true;
        }
        repaint();
    }

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	class TimerHandler implements ActionListener{
		public void actionPerformed( ActionEvent e){

            if(!stop && v != 0)
            {
                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);

                vV = v;
                hN = hV + v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                y = buttonYnul - (int)hV;

                bal.setbounds(x,y);
                repaint=true;

                try
                {
                Thread.sleep( t );
                [b]}catch(InterruptedException [COLOR="Red"]e[/COLOR]){}b[/b]

                if(!(v > -1))
                    stop = true;
            }


            v = vV;
            if(!(hN <= 0))
            {


                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);
                hN = hV - v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                y = buttonYnul - (int)hV;

                bal.setbounds(x,y);
                repaint=true;

                try
                {
                 Thread.sleep( t );
                [b]}catch(InterruptedException [COLOR="Red"]e[/COLOR]){}[/b]
            }


			if(repaint){
				repaint();
				repaint=false;
			}
		}
	}
	
}

class Bal extends Thread{
	public int x, y, h, teller;
	
	
	Bal(int x, int y, int h){
		this.x = x;
		this.y = y;
		this.h = h;
		
	}
		

	public Bal() {
		// TODO Auto-generated constructor stub
	}


	public void setbounds(int x, int y){
		this.x = x;
		this.y = y;
	}
	public void teken(){
		repaint();
	}


	private void repaint() {
		
	}
	
}
 
e is de naam van je ActionEvent en je mag niet twee keer dezelfde variabelenaam hebben
en bij de eerste fout staat ook nog een 'b' achter de scope van je catch
 
Ik heb de e verandert in t en hij geeft inderdaat geen fout meer, maar heb probleem is dat als ik op spatie klik er nog altijd nix gebeurt, moet ik nog ergens iets veranderen?

Nog maar is mijn code:

Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;

public class Bewegen2 extends Applet implements KeyListener{
	/* spring gegevens */
	double v = 10;                  //startsnelheid omhoog         
    double hV = 0;                  //hoogte voor berekening
    double hN = 0;                  //hoogte na berekening
    double m = 50;                //massa, waarde doet er niet toe
    double g = 0.25;                //op aarde 9,81; hoe hoger deze waarde
                                    //hoe lager de sprong
    double eVoor;                   
    int t = 10;                     //duur van één tijdstap
    double vV  = 0;                 //tijdelijke opslag snelheid
	boolean stop = false;
    boolean springen;
    /* einde springgegevens */
    
    public static boolean jump = false;
    public static int x=50;
    public static int y=50;
    public static int buttonYnul = 50;
    public static Bal bal = new Bal();
	private Timer timer;
    int lengtex1[] ={0,5};
    int lengtey1[] ={0,5};
    int lengtex2[] ={0,5};
    int lengtey2[] ={0,5};
    int h=20; //hoogte cirkel
	boolean repaint;
    
	public void init(){
        this.setFocusable(true);
        this.addKeyListener(this);
        timer = new Timer(5, new TimerHandler() );
        timer.start();
    }
	public void paint(Graphics g){
		g.fillOval(x,y,h,h);
		g.drawLine(30,30,100,30);
	}
    public void keyTyped(KeyEvent e) {
        //dummy
    }

	@Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_DOWN){
            y+=2;
            for(int i=30;i<100;i++){
            	if((y+h)==30&&x==i){
                    y-=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_UP){
            y-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    y+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x+=2;/*
            for(int i=30;i<100;i++){
            	if(x==i){
                    x-=2;
            	}
            }
            */
        }
        if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x-=2;
            for(int i=30;i<100;i++){
            	if(y==30&&x==i){
                    x+=2;
            	}
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_SPACE){
        	springen = true;
        }
        repaint();
    }

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	class TimerHandler implements ActionListener{
		public void actionPerformed( ActionEvent e){

            if(!stop && v != 0)
            {
                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);

                vV = v;
                hN = hV + v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                y = buttonYnul - (int)hV;

                bal.setbounds(x,y);
                repaint=true;

                try
                {
                Thread.sleep( t );
                }catch(InterruptedException l){}

                if(!(v > -1))
                    stop = true;
            }


            v = vV;
            if(!(hN <= 0))
            {


                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);
                hN = hV - v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                y = buttonYnul - (int)hV;

                bal.setbounds(x,y);
                repaint=true;

                try
                {
                 Thread.sleep( t );
                }catch(InterruptedException l){}
            }


			if(repaint){
				repaint();
				repaint=false;
			}
		}
	}
	
}

class Bal extends Thread{
	public int x, y, h, teller;
	
	
	Bal(int x, int y, int h){
		this.x = x;
		this.y = y;
		this.h = h;
		
	}
		

	public Bal() {
		// TODO Auto-generated constructor stub
	}


	public void setbounds(int x, int y){
		this.x = x;
		this.y = y;
	}
	public void teken(){
		repaint();
	}


	private void repaint() {
		
	}
	
}
 
dat zul je zelf even moeten debuggen, je kunt bijvoorbeeld kijken naar of je de spatietoets wel ontvangt, of je er wat mee doet in je timer, of je timer uberhaupt ooit actief wordt, of je scherm opnieuw getekent wordt als je timer getriggered is etc etc etc
 
Hier nog een paar tips.

Je hebt Bal extends Thread, dit is nergens voor nodig. Bal is niet een thread. Dus Bal is een gewone klasse en hoeft niks te "extenden". (Je hoeft ik het algemeen nooit een Thread te extenden.. Gebruik "implements Runnable.." dit is veel netter.)

Verder zal ik de functie om de bal te besturen dan ook netjes in de bal klasse zetten. Kan je in je key-listener bal.naarRechts() en bal.naarLinks() aanroepen.

Je bal zal inderdaad niet springen. Je zet wel de variabele springen op true.. Maar waar gebruik je deze verder nog ??

En als laatste gebruik alleen "static" als dat nodig is.

Succes..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan