Да - вы в основном блокируете поток пользовательского интерфейса, поэтому его обновление никогда не дойдет до конца.
Спать в потоке пользовательского интерфейса - очень плохая идея.
Если вы хотите сделать что-то подобное, вы должны использовать Timer
. (Я предполагаю, что вы используете Swing. Если нет, измените свой вопрос, чтобы указать, какую платформу пользовательского интерфейса вы используете.)
Следует также отметить, что Thread.sleep
является статическим методом. Вы используете это, как если бы это был метод экземпляра. По общему признанию Вы называете это "в" текущем потоке, но Ваше использование предполагает, что Вы думаете, что:
Thread t = new Thread(...);
t.start();
t.sleep(1000);
заставит новый поток спать. Это не будет - это заставит текущий поток спать, потому что это то, что Thread.sleep
всегда делает. IMO, для Java было ошибкой позволять вам вызывать статические методы таким образом - если вы используете Eclipse, есть возможность сделать это предупреждением или ошибкой.