2010-10-28 2 views
0

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

, если я писал sometingh так, внутри метода (под контролем события мыши)

//.... 
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

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

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

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

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