Может кто-нибудь скажет мне, почему приведенный ниже код блокирует основной поток?Зачем нужна основная затмение
методы loadFile
запускает рабочий поток, который загружает огромный файл журнала, который может занять 10 секунд. И когда я запускаю программу, кнопка, ответственная за запуск файлового потока, зависает, пока файл не будет загружен, и нить файла завершит свою работу.
Кроме того, в трех строках следуйте вызову метода loadFile
, я пытаюсь отобразить что-то вроде «loading ....», и пока файл не загружен или его поток еще не завершил работу, i отобразите тот же текст «Загрузка .....» с дополнительной точкой до тех пор, пока поток файлов/рабочий поток не завершится.
Пожалуйста, сообщите мне, почему приведенный ниже код блокирует основной поток, и как добиться отображения текста информирует пользователя о том, что файл по-прежнему загружается с дополнительной точкой в конец текста.
Надеюсь, мой вопрос ясен.
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();
}
}
@NPE, пожалуйста, см. Требуемый метод публикации – rmaik