Can anyone help me locate the error?

Hi,
Same question but with tagged code, so people can read it.
I have been working on a small game, and have been able to make most of it run.
However, every now and again when i try to start it, it loads the frame and graphics, but don't start the game loop.
I think i have been starring at it too long, because i can't see WHY?
Here is the code, i assume its something connected to the boolean "waitingForKeyPress"
Sorry about the commentss being in danish, but its a quite simple program, so im sure it makes sense.
public class EagleFlight extends Canvas {
     private static final long serialVersionUID = 1L;
     //Strategybuffer til page flipping, samt grafiske variable.
     private BufferStrategy strategy = null;
     //private BufferedImage backbuffer = null;     
     private ImageEntity background = null;     
     //private Graphics2D g;     
     //private BufferedImage expl;
     private BufferedImage[] explosion2;     
     private boolean gameRunning = true;
     //Lister over entiteter i spillet.
     private ArrayList<Entity> entities = new ArrayList<Entity>();
     private ArrayList<ShipEntity> shipAnimation = new ArrayList<ShipEntity>();
     //Lister over entiteter der evt skal fjernes i gameLoop.
     private ArrayList<Entity> removeList = new ArrayList<Entity>();
     private ArrayList<Entity> removeAsteroid = new ArrayList<Entity>();
     //Variable til spillerens skib.
     private ShipEntity ship, shipL, shipR, eagleM;
     private double moveSpeed = 300;
     private long lastFire = 0;
     private long firingInterval = 500;
     private String message = "";
     //Booleans til keyInput og spilkontrol.
     private boolean waitingForKeyPress = true;
     private boolean leftPressed = false;
     private boolean rightPressed = false;
     private boolean firePressed = false;
     private boolean isThrusting = false;
     private Boolean shipHit = false;
     private Boolean animation = false;
     //Klasser der bruges i spillet.
     private FXSound fxSound = null;
     private Music music;     
     int score =0;
     private int astroidCount = 0;
     //Variable til ekspoltionsanimation.
     private int  v = 0, x = 0, y = 0, eksp = 0;
     //Opretter JFrame og tilf���jer JPanel.
     public EagleFlight(){
          JFrame container = new JFrame("Eagle Flight 1999");                    
          JPanel panel = (JPanel) container.getContentPane();
          panel.setPreferredSize(new Dimension(800,600));
          panel.setLayout(null);
          //Tilf���jer EagleFlight canvas til JPanel
          setBounds(0,0,800,600);
          panel.add(this);
          //S���ttes til true, s��� for���get graphics har ansvaret.
          setIgnoreRepaint(true);
          //Pakker og synligg���r vinduet.
          container.pack();
          container.setResizable(false);
          container.setVisible(true);
          // Tilf���jer windows close funktion
          container.addWindowListener(new WindowAdapter() {
               public void windowClosing(WindowEvent e) {
                    System.exit(0);
          // Tilf���jer keyListener og inputhandler.
          addKeyListener(new KeyInputHandler());
          //S���tter fokus til dette vindue-
          requestFocus();
          // Laver buffering strategy til accelerated graphics
          createBufferStrategy(2);
          strategy = getBufferStrategy();
          // Tilf���jer midlertidigt Entities, s��� startsk���rmen ikke er tom.
          initEntities();
     }//End of EagleFlight().
     //Nulstiller variable og lister.
     private void startGame() {
          entities.clear();
          initEntities();          
          shipHit = false;          
          leftPressed = false;
          rightPressed = false;
          firePressed = false;
          gameRunning = true;
          music = new Music();
          music.start();
          waitingForKeyPress = false;
     }//end of startgame().
     private void initEntities() {
          //Laver 3 skibe til thrusteranimationen.
          ship = new sprite.ShipEntity(this,"Sprites/eagle.png",370,430);
          shipL = new sprite.ShipEntity(this,"Sprites/eagle1.png",370,430);
          shipR = new sprite.ShipEntity(this,"Sprites/eagle2.png",370,430);
          shipAnimation.add(ship);
          shipAnimation.add(shipL);
          shipAnimation.add(shipR);
          //Opretter baggrundsbillede.
          new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB);
          background = new ImageEntity("Sprites/stars.png",0,0);
          //Klarg���r special effect lyd.
          fxSound = new FXSound();
          //Opretter eksplotionsanimation
          explosion2 = new ExplotionImages().explosion();
          //Laver en pokkers bunke asteroider og placerer dem "over" JPanel, s��� de falder naturligt.
          for (int row=0;row<6;row++) {
               for (int x=0;x<10;x++) {
                    Entity astroid = new sprite.Astroid(this,"Sprites/asteroid1.png",20+(x*120),(-2800)+row*400);
                    entities.add(astroid);                                   
                    astroidCount++;
          for (int row=0;row<6;row++) {
               for (int x=0;x<10;x++) {
                    Entity astroid = new sprite.Astroid(this,"Sprites/asteroid4.png",20+(x*120),(-3800)+row*400);
                    entities.add(astroid);                                   
                    astroidCount++;
          for (int row=0;row<6;row++) {
               for (int x=0;x<10;x++) {
                    Entity astroid = new sprite.Astroid(this,"Sprites/asteroid2.png",20+(x*120),(-4800)+row*400);
                    entities.add(astroid);                                   
                    astroidCount++;
          for (int row=0;row<6;row++) {
               for (int x=0;x<10;x++) {
                    Entity astroid = new sprite.Astroid(this,"Sprites/asteroid3.png",20+(x*120),(-5800)+row*400);
                    entities.add(astroid);                                   
                    astroidCount++;
     }//end of initEntities()
     //Fjerner de entities der ikke bruges mere.
     //@param entiteten der skal fjernes.
     public void removeEntity(Entity entity)
          removeList.add(entity);               
     }//end of removeEntity().
     //Tilf���jer ramte asteroider til remove listen.
     //@param entiteten der skal tilf���jes.
     public void removeAsteroid(Entity doomed){
          removeAsteroid.add(doomed);
     }//End of removeAsteroid().
     //Udf���res n���r spilleren d���r.
     public void notifyDeath() {
          message = "All your base are belong to us!";
          shipHit = true;
          removeAsteroid.add(eagleM);
          shipAnimation.clear();          
     }//End of notifyDeath().
     //Fors���ger at affyre v���ben, hvis reload er ok og skibet ikke er ramt.
     public void tryToFire() {
          // check that we have waiting long enough to fire
          if (System.currentTimeMillis() - lastFire < firingInterval) {
               return;
          if (!shipHit){
               lastFire = System.currentTimeMillis();
               ShotEntity shot = new sprite.ShotEntity(this,"Sprites/shot.gif",ship.getX()+23,ship.getY()-15);
               entities.add(shot);
               fxSound.fxSound1();
     }//End of tryToFire().
     //Metode til at vinde spillet.
     public void notifyAlienKilled() {
          astroidCount--;
          score++;
          fxSound.fxSound3();
          if (astroidCount == 0) {
     }//End of notifyAlienKilled()
     public void gameLoop() {
          long lastLoopTime = System.currentTimeMillis();
          long timeInGame = 0;
          // I dette loop udf���res spillets grafik og logik.
          while (gameRunning) {
               // Beregner tid for hvor meget de enkelte grafiske enheder skal flyttes
               long delta = System.currentTimeMillis() - lastLoopTime;
               lastLoopTime = System.currentTimeMillis();
               timeInGame = (timeInGame + System.currentTimeMillis()/100000);
               // Skaffer den grafiske acceleration.
               // Tegner baggrunden.
               Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
               background.draw(g);
               //Cykler rundt mellem asteroider og flytter dem.               
                    if (!waitingForKeyPress) {
                         for (int i=0;i<entities.size();i++) {
                              Entity entity = (Entity) entities.get(i);
                              entity.move(delta);
                         //Bev���ger de 3 skibe i sync.
                         for (int e=0;e<shipAnimation.size();e++) {
                              ShipEntity fakeeaglemove = (ShipEntity) shipAnimation.get(e);
                              fakeeaglemove.move(delta);
               // Cykler rundt mellem entities og tegner dem.          
               try {
                    for (int i=0;i<entities.size();i++) {
                         Entity entity = (Entity) entities.get(i);
                         entity.draw(g);
                    //Tegner det skib der er i brug.
                    for (int e=0;e<shipAnimation.size();e++)
                         eagleM = (ShipEntity) shipAnimation.get(e);
                         if (leftPressed)
                         {eagleM = shipL;
                         if (rightPressed)
                         {eagleM = shipR;
                         else if ((!leftPressed) && (!rightPressed))
                         {eagleM = ship;
                         eagleM.draw(g);
               } catch (RuntimeException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
               //Brute force detection p��� skibet og asteroider.               
               try {
                    for (int c = 0; c < entities.size(); c++) {
                         for (int m = 0; m < shipAnimation.size(); m++) {
                              Entity me = (Entity) shipAnimation.get(m);
                              Entity him = (Entity) entities.get(c);
                              if (me.collidesWith(him)) {
                                   //removeAlien.add(him);
                                   me.collidedWith(him);
                                   him.collidedWith(me);
               } catch (Exception e) {
               //Brute force detection p��� skud og asteroider.
               try {
                    for (int p = 0; p < entities.size(); p++) {
                         for (int s = p + 1; s < entities.size(); s++) {
                              Entity me = (Entity) entities.get(p);
                              Entity him = (Entity) entities.get(s);
                              if (me.collidesWith(him)) {
                                   me.collidedWith(him);
                                   him.collidedWith(me);
               } catch (Exception e) {
               //Explotion animation.
               for (int i=0;i<removeAsteroid.size();i++) {
                    Entity entity = (Entity) removeAsteroid.get(i);
                    explosion(entity);                                   
               if (animation){
                    int sequence[] = { 0,1,2,3,4,5,5,4,3,2,1,0};                    
                    eksp = sequence[v];
                    g.drawImage(explosion2[eksp], x-100,y-100, null);
               //Afslutter spillet hvis spillerens skib er ramt.
               if (eksp == 0 || v == 12){     
                    if (shipHit){
                         animation = false;
                         waitingForKeyPress = true;
                         music.stop();                                        
                         if(isThrusting){
                              fxSound.StopThruster();
                    animation = false;
                    v = 0;
                    eksp = 0;
               v++;//Opdaterer image nummer for eksplotionsanimation til n���ste genneml���b.
               // Fjerner entities der ikke er med mere.
               entities.removeAll(removeList);
               entities.removeAll(removeAsteroid);
               //Nulstiller removelisterne
               removeList.clear();                              
               removeAsteroid.clear();
               // Mens der ventes p��� keyinput vises dette.
               if (waitingForKeyPress) {
                    g.setColor(Color.white);
                    g.drawString(message,(800-g.getFontMetrics().stringWidth(message))/2,250);
                    g.drawString("Insert coin",(800-g.getFontMetrics().stringWidth("Insert coin"))/2,300);
                    timeInGame = 0;
               g.setColor(Color.white);               
               g.drawString("Score: "+score,720,595);
               g.drawString("Time in Flight: "+timeInGame/1000000000+" Secs",5,595);
               // Graphics ryttes op og bufferen flippes.
               g.dispose();
               strategy.show();
               // Nulstiller skibets bev���gelse.
               ship.setHorizontalMovement(0);
               shipL.setHorizontalMovement(0);
               shipR.setHorizontalMovement(0);
               //Tilpasser skibets horizontale bev���gelseshastighed til input.
               if ((leftPressed) && (!rightPressed))
                    ship.setHorizontalMovement(-moveSpeed);
                    shipL.setHorizontalMovement(-moveSpeed);
                    shipR.setHorizontalMovement(-moveSpeed);
               else if ((rightPressed) && (!leftPressed))
                    ship.setHorizontalMovement(moveSpeed);
                    shipL.setHorizontalMovement(moveSpeed);
                    shipR.setHorizontalMovement(moveSpeed);//animationtest ship changed to eagle
               //Affyrings sekvens
               if (firePressed)
                    tryToFire();
               // Lille pause til andre ting.
               try { Thread.sleep(10); } catch (Exception m) {}
     }//End of gameLoop
     //Metode til kontrol af thrusterlyden.
     private void thrusterSound(){
          if (!isThrusting){
               fxSound.fxSound2();                   
               isThrusting = true;
     }//End of thrusterSound
     //Metode til at inds�tte eksplotion p� den rette plads.
     //@param den ramte entitet.
     private void explosion(Entity entity){
          x = entity.getX();
          y = entity.getY();
          animation = true;
     }//End of explosion
     //Inner class der klarer input fra keybard.
     private class KeyInputHandler extends KeyAdapter {
          //S�tter t�ller til 1, s� wait for input virker.
          private int pressCount = 1;
          //@param den trykkede tast.
          public void keyPressed(KeyEvent e) {
               // Ser f�rst om der ventes p� input til start.
               if (waitingForKeyPress) {
                    return;
               //Er spillet igang udf�res input
               if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    leftPressed = true;                         
                    thrusterSound();
               if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    rightPressed = true;
                    thrusterSound();
               if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    firePressed = true;
          } //End of keyPressed
          //Stopper handlingen fra input
          //@param den trykkede tast.
          public void keyReleased(KeyEvent e) {
               if (waitingForKeyPress) {                    
                    return;
               if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    leftPressed = false;
                    fxSound.StopThruster();
                    isThrusting = false;
               if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    rightPressed = false;
                    fxSound.StopThruster();
                    isThrusting = false;
               if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    firePressed = false;
          }//End of keyReleased
          //Metode til at starte spillet med any key.
          //@param den trykkede tast.
          public void keyTyped(KeyEvent e) {
               if (waitingForKeyPress) {
                    if (pressCount == 1) {
                         // Starter spillet.
                         waitingForKeyPress = false;
                         startGame();
                         //pressCount = 0;
                         System.out.println("game startet");
                    } else {
                         pressCount++;
               // Tilf�jer esc key til at afslutte spillet.
               if (e.getKeyChar() == 27) {
                    System.exit(0);
     }//End of KeyTyped.
     public static void main(String args[])
          EagleFlight ef = new EagleFlight();              
          ef.gameLoop();
     }//End of main.
}//End of class EagleFlight.Edited by: Mondariz on May 2, 2008 9:54 AM

I had originally not included the inputhandler as a swingworker, i was simply trying....I have removed it again now.
I have narrowed my problem down to this part of the code.
//Inner class der klarer input fra keybard.
     private class KeyInputHandler extends KeyAdapter {
          //S�tter t�ller til 1, s� wait for input virker.
          private int pressCount = 1;
          public KeyInputHandler(){
               System.out.println("keypressed");
          //@param den trykkede tast.
          public void keyPressed(KeyEvent e) {
               // Ser f�rst om der ventes p� input til start.
               if (waitingForKeyPress) {
                    return;
               //Er spillet igang udf�res input
               if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    leftPressed = true;                         
                    thrusterSound();
               if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    rightPressed = true;
                    thrusterSound();
               if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    firePressed = true;
          } //End of keyPressed
          //Stopper handlingen fra input
          //@param den trykkede tast.
          public void keyReleased(KeyEvent e) {
               if (waitingForKeyPress) {                    
                    return;
               if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    leftPressed = false;
                    fxSound.StopThruster();
                    isThrusting = false;
               if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    rightPressed = false;
                    fxSound.StopThruster();
                    isThrusting = false;
               if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    firePressed = false;
          }//End of keyReleased
          //Metode til at starte spillet med any key.
          //@param den trykkede tast.
          *public void keyTyped(KeyEvent e)* {
               System.out.println("keyTyped");
               if (waitingForKeyPress) {
                    if (pressCount == 1) {
                         // Starter spillet.
                         waitingForKeyPress = false;
                         startGame();
                         //pressCount = 0;
                         System.out.println("game startet");
                    } else {
                         pressCount++;
               // Tilf�jer esc key til at afslutte spillet.
               if (e.getKeyChar() == 27) {
                    System.exit(0);
          }//End of KeyTyped.
     }//End of class KeyInputhandler.The class is always created, but it does not always execute the keyTyped method.
This means that i dont call startGame and i dont get a false for waitingForKeyPress.
TBH it looks more like a broken keyboard to me ;-)

Similar Messages

Maybe you are looking for