Почему основной поток заблокирован
Может кто-нибудь сказать мне, почему приведенный ниже код блокирует основной поток?
loadFile
method запускает рабочий поток, который загружает огромный файл журнала, загрузка которого может занять 10 секунд. И когда я запускаю программу, кнопка, отвечающая за запуск файлового потока, зависает до тех пор, пока файл не загрузится и файловый поток не завершит свою работу.
Кроме того, в трех строках следуйте зову loadFile
Метод, я пытаюсь отобразить что-то вроде "загрузка....", и пока файл не загружен или его поток не закончил работать, я отображаю тот же текст "Загрузка....." с дополнительной точкой пока поток файла / рабочий поток не завершится.
пожалуйста, дайте мне знать, почему приведенный ниже код блокирует основной поток, и как добиться отображения текста, информирует пользователя о том, что файл все еще загружается с дополнительной точкой в конце текста.
Я надеюсь, что мой вопрос ясен.
if ( (this.client != null) && (this.client.isConnected()) ) {
System.out.println("Client is connected to a broker.");
statusarea.append(Log.w(TAG, "preLoadSystemChecks", "Client Connected") + "\n");
loadFile();
StringBuilder sb = new StringBuilder(".");
statusarea.append(Log.i(TAG, "preLoadSystemChecks", "Loading measurements file.") + "\n");
statusarea.append(Log.i(TAG, "preLoadSystemChecks", "Loading" + sb) + "\n");
while ( (this.fileThread != null) && (this.fileThread.getState() != State.TERMINATED) ) {
sb.append(".");
}
LoadFile ():
protected void loadFile() throws MqttException {
// TODO Auto-generated method stub
statusarea.append(Log.d(TAG, "loadFile", "File is loaded") + "\n");
if (this.fileThread == null) {
fileThread = new Thread(fileProcessinRunnable, FILE_THREAD);
fileThread.start();
}
}
1 ответ
Ваш while
цикл блокирует основной поток, пока поток загрузчика не завершится:
while ( (this.fileThread != null) && (this.fileThread.getState() != State.TERMINATED) ) {
sb.append(".");
}
(Обратите внимание, что просто добавление точки к StringBuilder
не приведет ни к чему, отображаемому где-либо.)