Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8086053
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 5, 20262026-06-05T18:19:58+00:00 2026-06-05T18:19:58+00:00

So, my JFrame becomes unresponsive when I run this code. I managed to trace

  • 0

So, my JFrame becomes unresponsive when I run this code. I managed to trace it back to the while loop under gameLoop(). Regardless of using delay(1000/FRAMERATE) which calls Thread.sleep() within it, it will not allow the Key or Mouse Listeners to do their job.

Full code below, problem exists in gameLoop()

package me.LemmingsGame;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.swing.*;

public class Game extends JFrame implements KeyListener, MouseListener{

    private World wrld;//reference to current world
    private WorldFile loader=null;//world data

    private int gateCounter;

    private int width,height; //width and height of level

    private int mx,my;

    private int tool = Lemming.CLIMB;
    private Image dbImage; private Graphics dbg; //backbuffer  
    private Image [] sprites;//all images used in game

    private Lemming[] lemmings; //array of all Lemmings in level
    private int nextLem;//next Lemming to be received from Gate class

    private int running;//state of game
    private static final int FRAMERATE=180;//assigned framerate

    public Game(WorldFile loader){
        super("Lemmings");
        setLocation(50,40);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        width=3+loader.x*10;height=29+loader.y*10;
        loadImages();
        lemmings=new Lemming[loader.noLemmings*loader.gates().length];
        setSize(width,height);
        setVisible(true);   
        addMouseListener(this);
        addKeyListener(this);
        this.loader=loader;
        running=2;
        dbImage= createImage(width,height);
        dbg=dbImage.getGraphics();
        wrld=new World(loader,createImage(width,height), sprites, this);
        gameLoop();
    }
    public void loadImages(){
        sprites=new Image[2];
        sprites[0]=new ImageIcon("Resources/toolbar.png").getImage();
        sprites[1]=new ImageIcon("Resources/selector.png").getImage();
    }
    public static void delay(long len){
        try{
            Thread.sleep(len);
        }catch(InterruptedException e){
            System.out.println(e);
        }
    }
    public void moveLemmings(){
        if(nextLem>0)
            for(int i = 0;i<nextLem;i++)
                lemmings[i].cycle();
    }
    public void gameLoop(){

        wrld.openGates();
        while(running>0){
            delay(1000/FRAMERATE);
            if(running==2){
                gateCounter++;
                if(gateCounter>FRAMERATE*2){
                    wrld.cycleGates();
                    gateCounter=0;
                }
                moveLemmings();
                if(nextLem>0)
                    wrld.checkPositions(lemmings,nextLem);
            }
            repaint();
            //paint(getGraphics());
        }
    }
    public void paint(Graphics g){
        if(wrld!=null){
            dbg.setColor(Color.BLACK);
            dbg.fillRect(0, 0, width, height);
            wrld.draw(dbg);
            if(nextLem>0)
                for(int i=0;i<nextLem;i++){
                    lemmings[i].draw(dbg);
                }
            dbg.drawImage(sprites[0],0,0,null);
            dbg.drawImage(sprites[1],tool-3*39,0,null);
            g.drawImage(dbImage,3,29,this);
        }
    }
    public void addLemming(Lemming lemmy) {
        lemmings[nextLem]=lemmy;
        lemmy.spawn();
        nextLem++;
    }
    public void goal(){
        running=0;
        dispose();
        new Menu();
    }
    public void fail(){
        running=0;
        dispose();
        new Menu();
    }
    public void mouseClicked(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void keyTyped(KeyEvent e) {}
    public void mousePressed(MouseEvent e) {
        System.out.println("boop");
        mx=e.getX();
        my=e.getY();
        if(my<40)
            if(mx<40)
                tool=Lemming.CLIMB;
            else if(mx>39&&mx<=39*2)
                tool=Lemming.CHUTE;

    }
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }
    public void keyPressed(KeyEvent e) {
        System.out.println("boop2");
    }

    public void keyReleased(KeyEvent e) {

    }
}

If it matters the program begins here and goes to the Game class

package me.LemmingsGame;

import java.awt.*;
import java.awt.event.*;
import java.io.File;

import javax.swing.*;

public class Menu extends JFrame implements ActionListener{
    /**
     * 
     */
    private static final long serialVersionUID = -1448646591011984524L;
    private JComboBox worldList;
    private JButton launch, worldEditor;
    private String [] worldPaths;
    private String [] worldNames;
    private int currentWorld;
    public Menu(){
        super("Lemmings! By: Jordan and Seth");
        this.setLocation(new Point(550,400));
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        File listDir[] = new File("./Worlds").listFiles();
        int x=0;
        for (int i = 0; i < listDir.length; i++) 
            if (listDir[i].isDirectory()) 
                   x++;
        worldPaths=new String[x];
        worldNames=new String[x];
        x=0;
        for (int i = 0; i < listDir.length; i++) 
            if (listDir[i].isDirectory()){ 
                    worldPaths[x]=listDir[i].getPath().substring(2);    
                    worldNames[x]=worldPaths[x].substring(7);
                    x++;
            }
        worldList=new JComboBox(worldNames);
        worldList.addActionListener(this);
        worldEditor=new JButton("Open World Editor");
        worldEditor.addActionListener(this);
        launch = new JButton("Play");
        launch.addActionListener(this);
        Container cp = getContentPane();
        cp.setLayout(new FlowLayout());
        cp.add(worldEditor);
        cp.add(worldList);
        cp.add(launch);
        pack();
        setVisible(true);
    }
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==worldEditor){
            dispose();
            new MapEditor();
        }else if(e.getSource()==launch){
            dispose();
            try {
                new Game(new WorldFile(worldPaths[currentWorld]));
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }else if(e.getSource()==worldList){
            currentWorld=worldList.getSelectedIndex();
        }
    }
    public static void main(String [] args){
        new Menu();
    }
}

Probably irrelevant, but here’s a plug to the github repo https://github.com/cybnetsurfe3011/Lemmings-Computer-Science/

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-05T18:20:00+00:00Added an answer on June 5, 2026 at 6:20 pm

    You are performing Thread.sleep() in your main thread which in this case is the EDT (Event Dispatcher Thread). This thread is responsible for painting your graphics and listening to events. By doing Thread.sleep() you are essentially pausing it, thus not allowing it to do it’s job.

    It seems that you want to refresh your GUI at intervals (at least that is what I am guessing). If this is the case, you will need to move your logic to a new separate thread and then, call what ever update methods you will need from the thread you will have spawned off. To make changes visible, you will need to call the event dispatcher thread again by using the SwingUtilities.invokeLater() method.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

This code inside a JFrame form created in netbeans works fine as i'm trying
By using frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); can hide window. but how could i display another window after
I have created a jframe using net beans and add combo box to that.
I have created a JFrame and want to hide this from the taskbar in
I have created a JFrame form using netbeans GUI builder and place buttons on
I have a JFrame full of various components. When I run it, only a
I have a JFrame, in this JFrame I have a JPanel that I draw
I have a JFrame. This JFrame contains a JButton. I click the JButton and
I have a JFrame inside of which is a jpanel that im using as
How to maximize a JFrame through code?

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.