Почему создание класса и вызов функции класса приостанавливают любые визуальные изменения [дубликаты]

Второе выражение в вашем вопросе всегда будет вызывать execute @ test2 = 'testelse', потому что ELSE заканчивается сразу после первого выражения после else:

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'
ELSE
SET @test1 = 'testelse'
-- IF is done evaluating here
SET @test2 = 'testelse' 

Если у вас есть несколько выражений в IF , вы всегда можете группировать выражения, используя BEGIN / END.

Но в вашем случае самым простым способом было бы это:

IF (SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10
  SELECT @test1 = 'test1', @test2 = 'test2' 
ELSE
  SELECT @test1 = 'testelse', @test2 = 'testelse'
1
задан Jivings 23 May 2012 в 20:07
поделиться

3 ответа

Никогда не вызывайте Thread.sleep (...) из потока событий Swing, так как это приведет к тому, что сам поток событий будет спать. Поскольку этот поток отвечает за всю окраску Swing и взаимодействие с пользователем, это заставит ваше приложение спать.

Если все, что вы хотите, это задержка на дисплее, тогда рассмотрите использование Swing Timer .

Если, с другой стороны, поток событий скомпрометирован долговременной задачей, то выполняйте задачу в фоновом режиме, используя SwingWorker (как предположил Гийом 1+) .

6
ответ дан Hovercraft Full Of Eels 24 August 2018 в 07:57
поделиться

Thread.sleep является долговременной задачей. Когда вы выполняете такую ​​задачу в EDT, она блокирует выполнение всех запросов на перерисовку. Все запросы на перерисовку, которые ожидаются и которые были отправлены во время фазы сна, поставлены в очередь для будущей обработки.

В результате, когда EDT выходит из фазы sleep, он объединяет все такие запросы перерисовки (если объединение , которое является свойством по умолчанию) в одну перерисовку, которая выполняется. Если коалесцирование не включено, все запросы в очередь выполняются последовательно без какого-либо промежутка времени между ними. В результате кажется, что пользовательский интерфейс не обновлялся.

Чтобы исправить ситуацию, используйте SwingTimer, который запускается периодически через определенные промежутки времени или SwingWorker.

0
ответ дан Extreme Coders 24 August 2018 в 07:57
поделиться

Вы вызываете sleep в EDT (Event Dispatching Thread). Вы избегаете этой ситуации, так как, действительно, она замораживает пользовательский интерфейс.

Чтобы избежать этой ситуации, используйте SwingWorker вместо этого или, как было предложено HFOE, используйте Swing Timer

3
ответ дан Guillaume Polet 24 August 2018 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: