Обновите JLabel из другого потока - PullRequest
0 голосов
/ 05 мая 2011

Дорогие ребята, У меня проблема с качелями. Я не могу поделиться кодом, поскольку он противоречит политике компании, поэтому я постараюсь объяснить проблему.

Короче говоря, я создал класс, расширяющий JWindow, который содержит JLabel. Этот текст JLabel обновляется случайным образом через объект таймера, который создает экземпляр TimerTask каждые 50 мс, используя метод scheduleAtFixedRate. Значения в JLabel извлекаются путем вызова метода в отдельном потоке (назовем его потоком передачи), который обрабатывает передачу данных на определенное устройство. Проблема в том, что JWindow появляется на экране без какого-либо контента, пока не закончится передача на устройство, тогда я получу последний результат потока передачи. В чем проблема?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Вместо java.util.Timer, javax.swing.Timer может быть более удобным, как показано в этом примере .

1 голос
/ 05 мая 2011

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

В Javadoc каждого компонента Swing есть ссылка на эту страницу: http://download.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading,, где подробно описана политика потоков.

...