Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 22.06.2017
Сообщений: 7

Как заставить поток ждать

14.10.2018, 11:18. Показов 1328. Ответов 2

Студворк — интернет-сервис помощи студентам
Есть программа, в которую пользователь может залогиниться, за залогинивание отвечает отдельный поток, который обращается к серверу и получает от него ответ. Мне необходимо, чтобы поток выполнял код внутри цикла лишь раз, после чего засыпал, пока его не разбудит пользователь повторным нажатием кнопки войти. К сожалению, приведенный ниже код выдает ошибку "java.lang.IllegalMonitorStateExcept ion: object not locked by thread before wait()".
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package ru.utccom.utc;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
 
 
public class MainActvt extends AppCompatActivity {
    String response = "";
    EditText LoginEdit;
    EditText PasswordEdit;
    DBTalker dbTalker = new DBTalker();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_actvt);
        LoginEdit = findViewById(R.id.MALoginText);//magic
        PasswordEdit = findViewById(R.id.MAPasswordText);
   }
    Thread getRequest = new Thread() {
        String request;
        @Override
        public void run() {
                request = dbTalker.doesUserExists(MainActvt.this.LoginEdit.getText().toString(),
                        MainActvt.this.PasswordEdit.getText().toString());
                while (!interrupted()) {
                    MainActvt.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (request.equals("1")) {
                                Toast.makeText(MainActvt.this, "Вы успешно вошли.", Toast.LENGTH_SHORT).show();
                                getRequest.interrupt();
                            } else if (request.equals("0")) {
                                Toast.makeText(MainActvt.this, "Неверное имя пользователя или пароль.", Toast.LENGTH_SHORT).show();
                            }
                            else {
                                Toast.makeText(MainActvt.this, "Произошла ошибка.", Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                    try {
                        wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
    public void OnMALoginButtonClick(View v) {
        if (LoginEdit.getText().toString().equals("") || PasswordEdit.getText().toString().equals("")) {
            Toast.makeText(MainActvt.this, "Заполните все поля.", Toast.LENGTH_SHORT).show();
        } else {
            if (getRequest.getState() == Thread.State.NEW) {
                getRequest.start();
            }
            else {
                getRequest.notify();
                }
            }
        }
    }
Подскажите пожалуйста. каким все же образом я могу реализовать задуманное? На код попрошу не ргуаться, так как новичок, хотя, если конструктивно, то я только за)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2018, 11:18
Ответы с готовыми решениями:

Как заставить поток ждать в некоторых ситуациях
Есть такой сценарий приложения: Приложение до запуска TCP кеширует данные из MySQL в std::vector, далее запускается TCP и ожидаются...

Как заставить один поток ждать, пока работает другой
Здравствуйте, стоит такая задача: есть public static bool forks = new bool;// false - свободна public void takeFirstSpoon(int...

Как заставить поток ждать, пока не будет выполнено определенное действие?
Добрый день. Решил написать небольшую игру в VB .NET Первая версия оказалась рабочей, однако я ее написал без потоков, поэтому все...

2
90 / 89 / 23
Регистрация: 08.07.2014
Сообщений: 548
14.10.2018, 16:52
Гуглите про AsyncTask
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
15.10.2018, 09:18
Повесить на главный поток прогрессБар и не городить всякую фигню.
Про асинк таск гуглить надо было много лет назад.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2018, 09:18
Помогаю со студенческими работами здесь

QtConcurrent - заставить главный поток ждать своих детей
Вобщем не успел я разобраться QtConcurrent::run, и тут новая беда :) допустим у меня выполняется операция в дочернем потоке через...

Как заставить цикл ждать ?
Есть массив времён которые обрабатываются в цикле. В теле цикла запускается таймер который по окончании работы вызывает прерывание....

Как заставить браузер не ждать ответа?
Суть такова... Принимаю POST, а теперь браузер надо послать на три веселые буквы и выполнять дальше код! В данный момент у меня принимается...

Семафоры (как заставить клиента ждать?)
1 программа (сервер): создаем разделяемую память и записываем 12345.6789 2 программа (клиент): подключается к разделяемой памяти, выводит...

Как заставить прогу на с++ ждать новые записи из БД
Нужно чтобы прога на с++ ждала новых записей в БД и если они поступят производила с ними кое какие действия Вопрос в том как именно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru