2014-01-24 3 views
0

Я программирование робота, который использует интерфейс с кнопками и текстовое поле и прочее, и я знаю, что если вы используетеЧто такое эквивалент интерфейса Java Thread.sleep()?

Thread.sleep(); 

, то это будет в значительной степени нарушить ваш интерфейс. Я знаю, что

Thread.sleep(); 

довольно просто останавливает текущую тему и возобновляет ее после определенного количества времени. Мне нужно иметь небольшую паузу в моей программе, не нарушая мой интерфейс, такие как интерфейс эквивалент

Thread.sleep(1000); 

Я посмотрел на часы, и я не могу найти ничего, чтобы создать небольшую паузу в одной части вашей программы при сохранении интерфейса. Также я не знаю о многопоточности, поэтому, пожалуйста, объясните материал как можно подробнее. Заранее спасибо за помощь!

+0

Что делает ваш код в настоящее время, когда ему нечего делать? Как вы, например, дождитесь, когда пользователь скажет вам что-то сделать? Концептуально, способ думать об этом заключается в следующем: теперь вам нечего делать. Но вам нужно будет что-то сделать за секунду или если пользователь скажет вам что-то сделать. Поэтому организуйте уведомление о том, чтобы программа была уведомлена через секунду. И затем сделайте то, что вы делаете, когда вам нечего делать, ожидая ввода пользователя или уведомления. Отслеживайте уведомления по таймеру так же, как и пользовательский ввод. –

+0

Я не понял, что вы подразумеваете под словом «интерфейс» – edubriguenti

+0

@edubriguenti Я считаю, что он означает, например, что если пользователь нажимает кнопку, он не заметит, потому что его код спящий. –

ответ

2

Все в пользовательском интерфейсе Java Swing работает на одном специальном потоке (потоке Swing или «потоке диспетчеризации событий»). Если вы заблокируете этот поток с помощью Thread.sleep(), ваш пользовательский интерфейс перестанет отвечать на запросы.

Чтобы уметь спать (т. Е. Преднамеренно задерживать обработку), не блокируя пользовательский интерфейс, ваша программа, возможно, потребуется запускать на нескольких потоках. Я предлагаю вам взглянуть на Java tutorial on this topic. Многопоточность - довольно сложная тема, которая не может быть кратко описана в коротком ответе.

Непонятно, чего вы пытаетесь достичь с помощью своего sleep. Если вы хотите, чтобы какое-то действие было запущено в будущем, то класс Timer может делать то, что вам нужно, не требуя дополнительных потоков.

В библиотеках Java есть также helper classes для запуска задач на других потоках в приложении графического интерфейса.

+0

Спасибо, я посмотрел многопоточность и базовая многопоточность должны решить мою проблему. Я могу использовать основной класс в качестве своего графического интерфейса и вызывать другие классы как отдельные потоки, чтобы они работали и чтобы они останавливались, пока графический интерфейс работает постоянно. –

Смежные вопросы