Короткий ответ: paint()
вызывается в потоке событий, который также является потоком, который обрабатывает все события пользовательского интерфейса, и вы захватываете этот поток и помещаете его в бесконечный цикл.
Когда вы делаете это в методе рисования ...
while(Thread.currentThread().isAlive()){
...
}
... "текущий поток", над которым вы работаете, - это тот же поток, в который вы ввели этот метод, то есть поток обработки событий».Я думаю, что вы действительно хотели запустить фоновый поток, который периодически перерисовывает представление.Вы можете сделать это в конструкторе вашего компонента AWT:
new Thread() {
public void run() {
while(runBackgroundThread) {
mcr.getData();
repaint();
}
}
}.start();
Обратите внимание, что я также создал логическую переменную runBackgroundThread
, которая будет изменчивым полем в классе компонента.Установка значения false остановит поток загрузки.Напротив, Thread.currentThread().isAlive()
будет всегда истинным - текущий поток должен по определению быть живым.