Буферизован ли метод jtextarea.settext ()? - PullRequest
0 голосов
/ 28 октября 2010

Я не Java-разработчик, но мне нужно написать небольшой апплет для загрузки файла через FTP (на самом деле, я веб-разработчик). Все работает нормально, кроме способа отображения сообщений обратной связи. Позвольте мне объяснить на примере:

если я написал что-то подобное внутри метода (контролируемого событием click)

//....
myJpanel.setText("Connecting to remote server");

//actually, it's surrounded by try-catch statement
myFtpObject.connect(); //this is taken from a third part package 
myJpanel.setText("Connected")

Когда я пытаюсь запустить этот код, соединение устанавливается (после этого соединения я загружаю файлы без проблем), но внутри Jpanel myJpanel Я сразу же прочитал "подключено" (хотя это займет несколько секунд подключиться), и я никогда не вижу строку «Подключение к удаленному серверу».

Мне кажется, что метод setText в Jpanel каким-то образом буферизован.
Как я могу отображать сообщения в режиме реального времени?

(я пытался сделать System.out.println для тестирования, и он отлично работал!)
Спасибо

1 Ответ

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

если я написал что-то подобное в методе (контролируемом событием click)

Код, выполняемый в прослушивателе событий, выполняется в EDT. Проблема в том, что долго выполняемая задача блокирует Swing EDT. Таким образом, GUI никогда не получает возможности перекрасить себя.

Прочтите раздел из учебника по Swing на Параллельность для получения дополнительной информации и решения. Основное решение - создать отдельный поток для долгосрочной задачи.

Именно поэтому System.out.println (..) работает, потому что он выполняется в другом потоке.

...