Разбивка потоков, используемых JApplet - PullRequest
0 голосов
/ 31 октября 2010

Я потратил много времени, пытаясь понять это.Я создал JApplet, который использовал Thread.sleep () в цикле для анимации апплета.Но когда я попытался запустить апплет, экран остался пустым.Когда я рисую анимацию в отдельном потоке и вызываю перерисовку, апплет работает отлично.Я видел много объяснений, почему это происходит, но ни одно из них не было исчерпывающим.

Какой поток вызывает метод рисования?И почему эта нить не может частично нарисовать на холсте, сделать паузу и продолжить рисование?Я заметил, что некоторые вызовы Thread.sleep () работают должным образом, особенно когда они не находятся в цикле.

1 Ответ

1 голос
/ 31 октября 2010

Пользовательский интерфейс необходимо перекрасить, и это происходит в потоке пользовательского интерфейса.

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

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

Взгляните на Swing Painting и SwingWorker , чтобы понять, как запустить фоновый поток для выполнения некоторой работы, а затем обновить пользовательский интерфейс в потоке пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...