Буферизация метода jtextarea.settext ()?
Вопрос
Я не разработчик Java, но мне нужно написать небольшой апплет для загрузки файла через FTP (на самом деле, я веб-разработчик). Все работает нормально, за исключением того, как отображаются сообщения о обратной связи. Позвольте мне объяснить с примером:
Если я написал некоторое время, как это, внутри метода (контролируется событием клики)
//....
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. Я сразу читал «подключен» (ALTULT, требуется несколько секунд для подключения), и я никогда не вижу строку «подключения к удаленному серверу».
Звучит мне, как метод jpanel Settext в некотором роде буфет.
Как я могу отображать сообщения в режиме реального времени?
(Я пытался сделать System.out.Println для тестирования, и он отлично работал!)
Спасибо
Решение
Если я написал некоторое время, как это внутри метода (контролируется событием клики)
Код выполнен в слушатель события, выполняет на EDT. Проблема в том, что длительная рабочая задача блокирует EDT Swing. Таким образом, GUI никогда не получает шанс перекрасить себя.
Прочитайте раздел из учебного пособия на качелях на Параллельность Для получения дополнительной информации и для решения. Основное решение состоит в том, чтобы создать отдельный поток для длительной задачи.
Это также почему System.out.Println (..) работает, потому что он выполняется в другой поток.