Getting problem in threading in JAVA

Posted by chetans on Stack Overflow See other posts from Stack Overflow or by chetans
Published on 2010-03-19T06:22:39Z Indexed on 2010/03/19 9:31 UTC
Read the original article Hit count: 226

Filed under:

In this program i want to stop GenerateImage & MovingImage Thread both... And i want to start those threads from begining. Can u send me the solution? Here is the code........

package Game;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.MalformedURLException;
import java.net.URL;


public class ThreadInApplet extends Applet implements KeyListener
{
    private static final long serialVersionUID = 1L;

    Image[] asteroidImage;
    Image spaceshipImage;

    String levelstr="Easy Level";

    int[] XPos,YPos;
    int number=0,XPosOfSpaceship,YPosOfSpaceship,NoOfObstacles=5,speed=1,level=1,spaceBtnPressdCntr=0;

    boolean gameStart=false,pauseGame=false,collideUp=false,collideDown=false,collideLeft=false,collideRight=false;

    private Image offScreenImage;
    private Dimension offScreenSize;
    private Graphics offScreenGraphics;

    Thread GenerateImages,MoveImages;

    public void init()
    { 

            try 
            {
                GenerateImages=new Thread () //thread to create obstacles
                {
                    synchronized public void run () 
                    {
                        for(int g=0;g<NoOfObstacles;g++)
                        {
                            try     
                            {
                                sleep(1000);
                            } 
                            catch (InterruptedException e) 
                            {
                                e.printStackTrace();
                            }
                            number++; // Temporary counter to count the no of obstacles created
                        }
                     }
                } ;
               MoveImages=new Thread () //thread to move obstacles
                {
                    @SuppressWarnings("deprecation")
                                        synchronized public void run () 
                    {
                        while(YPos[NoOfObstacles-1]!=600)
                        {
                                pauseGame=false;
                            if(collide()==true) 
                            {
                                GenerateImages.suspend();
                                repaint();
                            }
                            else
                                GenerateImages.resume();
                            for(int l=0;l<number;l++)
                            {
                                        if(collide()==false)
                                    YPos[l]++;
                                    else GenerateImages.suspend(); 
                            }
                            repaint();
                            try 
                            {
                                sleep(speed);
                            } 
                            catch (InterruptedException e)
                            {
                                e.printStackTrace();
                            }
                        }

                        if(YPos[NoOfObstacles-1]>=600) //level complete state
                        {

                                level++;
                                try 
                                {

                                                                levelUpdation(level);

                                                                System.out.println("aahe");
                                                        }
                                catch (MalformedURLException e)
                                {
                                                                e.printStackTrace();
                                                        }
                                repaint();
                        }
                    }
                };
                initialPos();
                spaceshipImage=getImage(new URL(getCodeBase(),"images/space.png"));
                for(int i=0;i<NoOfObstacles;i++)
                {
                    asteroidImage[i]=getImage(new URL(getCodeBase(),"images/asteroid.png"));  
                    XPos[i]=(int) (Math.random()*700);
                    YPos[i]=0;
                }
                MediaTracker tracker = new MediaTracker (this);
                for(int i=0;i<NoOfObstacles;i++)
                {
                    tracker.addImage (asteroidImage[i], 0);
                }
             } 
            catch (MalformedURLException e) 
            {
                e.printStackTrace();
            }
            setBackground(Color.black);
            addKeyListener(this);
    }

  //Sets initial positions of spaceship & obstacle images------------------------------------------------------
    public void initialPos() throws MalformedURLException     
    {
         asteroidImage=new Image[NoOfObstacles];
         XPos=new int[NoOfObstacles];
         YPos=new int[NoOfObstacles];
         XPosOfSpaceship=getWidth()/2-35;
         YPosOfSpaceship=getHeight()-100; 
         collideUp = false;
         collideDown=false;
         collideLeft=false;
         collideRight=false; 
    }
    //level finished updations------------------------------------------------------------------------------
    @SuppressWarnings("deprecation")
    public void levelUpdation(int level) throws MalformedURLException
    {

        NoOfObstacles=NoOfObstacles+20;
        speed=speed-3;
        System.out.println(NoOfObstacles+"   "+speed);
        pauseGame=true;
        initialPos();
        repaint();

    }

    //paint method of graphics to print the messages---------------------------------------------------------
        public void paint(Graphics g)
    { 
        g.setColor(Color.white);
        if(gameStart==false)
            {
                g.drawString("SPACE to start", (getWidth()/2)-15, getHeight()/2);
                g.drawString(levelstr, (getWidth()/2), getHeight()/2+20);
            }
        if(level>1)
        {
                if(level==2)
                        levelstr="Medium Level";
                else
                        levelstr="High Level";

                g.drawString("Level Complete ", (getWidth()/2)-15, getHeight()/2);
                g.drawString(levelstr, (getWidth()/2), getHeight()/2+20);
                //g.drawString("SPACE to start", (getWidth()/2)-15, getHeight()/2+40);
        }
        for(int n=0;n<number;n++)
        {
            if(n>0)
            g.drawImage(asteroidImage[n],XPos[n],YPos[n],this);
        }
        g.drawImage(spaceshipImage,XPosOfSpaceship,YPosOfSpaceship,this);

    }
        //update method of graphics to print the messages---------------------------------------------------------
    @SuppressWarnings("deprecation")
        public void update(Graphics g)
    {
        Dimension d = size();
        if((offScreenImage == null) || (d.width != offScreenSize.width) || (d.height != offScreenSize.height))
        {
            offScreenImage = createImage(d.width, d.height);
            offScreenSize = d;
            offScreenGraphics = offScreenImage.getGraphics();
        }

        offScreenGraphics.clearRect(0, 0, d.width, d.height);
        paint(offScreenGraphics);
        g.drawImage(offScreenImage, 0, 0, null);
    }

    public void keyReleased(KeyEvent arg0){}
    public void keyTyped(KeyEvent arg0) {}

  //---------------------Key pressed event to start game & to move the spaceship--------------------------------------  
    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode()==32)
        {
                spaceBtnPressdCntr++;
                if(spaceBtnPressdCntr==1)
                {
                        gameStart=true;
                        GenerateImages.start();
                        MoveImages.start();
                }
        }
        if(gameStart==true)
        {
            if(e.getKeyCode()==37)
            {
                new Thread () 
                {
                    @SuppressWarnings("deprecation")
                                        synchronized public void run () 
                    {
                        for(int cnt1=1;cnt1<=10;cnt1++)
                        {
                                if(collide()==true && collideLeft == true)
                                {
                                        GenerateImages.suspend();
                                }
                                else
                                {
                                        if(XPosOfSpaceship>0)
                                        XPosOfSpaceship--;
                                }
                        }
                        repaint();
                    }
                }.start();
            }
            if(e.getKeyCode()==38)
            {
                new Thread () 
                {
                    @SuppressWarnings("deprecation")
                                        synchronized public void run () 
                    {
                        for(int cnt1=1;cnt1<=10;cnt1++)
                        {
                            if(collide()==true && collideUp == true)
                            {
                                GenerateImages.suspend();
                            }
                                else
                                {    
                                        if(YPosOfSpaceship>10)
                                    YPosOfSpaceship--;
                                }
                        }
                        repaint();
                    }
                }.start();
            }
            if(e.getKeyCode()==39)
            {
                new Thread () 
                {
                    @SuppressWarnings("deprecation")
                                        synchronized public void run () 
                    {
                        for(int cnt1=1;cnt1<=10;cnt1++)
                        {
                                if(collide()==true && collideRight == true)
                                {
                                        GenerateImages.suspend();
                                }
                                else
                                {
                                        if(XPosOfSpaceship<750)
                                    XPosOfSpaceship++;
                                }
                        }
                        repaint();
                    }
                }.start();
            }
            if(e.getKeyCode()==40)
            {
                new Thread () 
                {
                    @SuppressWarnings("deprecation")
                                        synchronized public void run () 
                    {
                        for(int cnt1=1;cnt1<=10;cnt1++)
                        {
                                if(collide()==true && collideDown == true)
                                {
                                        GenerateImages.suspend();
                                }
                                else
                                {
                                        if(YPosOfSpaceship<550)
                                    YPosOfSpaceship++;
                                }
                        }
                        repaint();
                    }
                }.start();
            }
        }
    }

    //------------------------------Collision checking between Spaceship & obstacles------------------------------
    public boolean collide()
    {
        int x1,y1,x2,y2,x3,y3,x4,y4;    //coordinates of obstacles 
        int a1,b1,a2,b2,a3,b3,a4,b4;    //coordinates of spaceship
        a1 =XPosOfSpaceship;
        b1=YPosOfSpaceship;
        a2=a1+spaceshipImage.getWidth(this);
        b2=b1;
        a3=a1;
        b3=b1+spaceshipImage.getHeight(this);
        a4=a2;
        b4=b3;
        for(int a=0;a<number;a++)
        {
            x1 =XPos[a];
            y1=YPos[a];
            x2=x1+asteroidImage[a].getWidth(this);
            y2=y1;
            x3=x1;
            y3=y1+asteroidImage[a].getHeight(this);
            x4=x2;
            y4=y3;

            /********checking asteroid touch spaceship from up direction********/ 
            if(y3==b1 && x4>=a1 && x4<=a2)
            {
                collideUp = true;
                collideDown=false;
                collideLeft=false;
                collideRight=false;
                return(true);

            }
            if(y3==b1 && x3>=a1 && x3<=a2)
            {
                collideUp = true;
                collideDown=false;
                collideLeft=false;
                collideRight=false;
                return(true);

            }

            /********checking asteroid touch spaceship from left direction******/ 
            if(x2==a1 && y4>=b1 && y4<=b3)
            {
                collideLeft=true;
                collideUp = false;
                collideDown=false;
                collideRight=false;
                return(true);

            }
            if(x2==a1 && y2>=b1 && y2<=b3)
            {
                collideLeft=true;
                collideUp = false;
                collideDown=false;
                collideRight=false;
                return(true);
            }

            /********checking asteroid touch spaceship from right direction*****/ 
            if(x1==a2 && y3>=b2 && y3<=b4)
            {
                collideRight=true;
                collideLeft=false;
                collideUp = false;
                collideDown=false;
                return(true);
            }
            if(x1==a2 && y1>=b2 && y1<=b4)
            {
                collideRight=true;
                collideLeft=false;
                collideUp = false;
                collideDown=false;
                return(true);
            }

            /********checking asteroid touch spaceship from down direction*****/
            if(y1==b3 && x2>=a3 && x2<=a4)
            {
                collideDown=true;
                collideRight=false;
                collideLeft=false;
                collideUp = false;
                return(true);
            }
            if(y1==b3 && x1>=a3 && x1<=a4)
            {    
                collideDown=true;
                collideRight=false;
                collideLeft=false;
                collideUp = false;
                return(true);
            }
        }
        return(false);
    }
}

© Stack Overflow or respective owner

Related posts about java