Barakados
Barakados

Reputation: 471

Delay is affecting entire Block

I have a code right below...take a look.

enter.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (enter.getText().length()>0){

            addToChat("You: "+enter.getText());
                enter.setText("");
                delay(1000);
                addToChat("oie");
            }

        }
    });

And here is the delay void.

  public static void delay(int delayTime){
    try
    {
        Thread.sleep(delayTime);
    } catch (InterruptedException ie)
    {
    }
}

The problem is whoever I type something into the text box and hit enter, it takes one second for not only the one to show up in the text area, but also the "You: " text block to show up, which is before the delay. Why is this delay affecting things BEFORE it and how can I fix this?

Upvotes: 1

Views: 124

Answers (2)

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726489

The UI does not get a chance to update before your action listener is finished. If you would like to change something after the delay, you should schedule it on a different thread, rather than wait inside the event handler:

addToChat("You: "+enter.getText());
enter.setText("");
new Thread(
    new Runnable() {
        public void run() {
            delay(1000);
            addToChat("oie");
        }
    }
).start();

Upvotes: 2

Ryan Stewart
Ryan Stewart

Reputation: 128779

You're sleep()ing in the Event Dispatch Thread, which means your UI is frozen and can't repaint itself, or accept input, or anything. You should only perform very quick actions in the EDT to avoid this effect. Check out the Graphical User Interfaces and following tutorial trails for the basics of UI programming.

Upvotes: 1

Related Questions