powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Чтение gui из другого потока
25 сообщений из 79, страница 3 из 4
Чтение gui из другого потока
    #38739559
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
Почему вы считаете, что при нажатии на кнопку нельзя в поток передать значение, которое действительно на момент нажатия кнопки?

Ну, введен штирх-код.
При нажатии передаем в конструктор и запоминаем в поле класса это значение. В методе run формируем запрос и используем это значение.



Напротив, я считаю, что так вполне можно сделать.

Одна проблема в том, что я уже довольно много накодил и у меня второй поток стартует сразу же практически с запуском программы. До собственно ввода данных он запускает экземпляр хрома, осуществляет вход на сайт (если, указан автологин в ини-файле) или же ждет залогинивания юзера, проверяет выбран ли нужный раздел сайта и только в этот момент начинает обрабатывать штрих-коды.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739561
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
smackmychi,
а что там с моим мылом, не совсем понял?
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739563
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
smackmychi,

Например,
Запускаете поток,
пока поток жив гоняете цикл - можете картинку загрузки в цикле обновлять
после цикла убираете картинку загрузки
после пишете проверку полученных из базы данных - достаете их, например, через какой-нить метод класса NewClass (для этого вам нужно и хранить экземпляр объекта)
после проверки идут действия с графическим интерфейсом
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739564
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnick,
ну что делать. Тебе оба говорят - максимум работы - в потоке ГУИ.
Доп поток только оборачивать МЕДЛЕННЫЕ операции.
Напр. у меня в андроиде только пост запрос на копку Старт
Всё остальное успевает обработаться 1000 раз в основном потоке ГУИ
IMHO
Удачи!
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739565
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

Если второй поток не отвечает за отрисовку интерфейса пользователя, то какие тогда проблемы?
Делаете в нем, что душе угодно, ибо это никак не отбразится на первом потоке, который отвечает за отрисовку и обработку событий пользовательского интерфейса. И не паритесь

Ваш адрес электронной почты указан в качестве адреса электронной почты организатора открытого аукциона, например.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739566
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smackmychiВаш адрес электронной почты указан в качестве адреса электронной почты организатора открытого аукциона, например.Это, как бы, требование законодательства
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739567
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

Ну, я как поставщик это все понимаю.
Просто удивился, что здесь увидел человека, тесно соприкасающегося с госзакупками
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739570
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
smackmychi,
ну это давняя история. Когда-то я работал в организации, которая среди прочего была уполномоченным органом по размещению заказов для района.

Что касается потоков. Нельзя сказать, что обрабатывающий поток никак не влияет на пользовательский интерфейс.
Во-первых, в момент, когда он по какой-то причине останавливается, кнопочка Пауза меняется на Продолжить.
Кроме того, выводятся сообщения в аналоге делфийского статусбара.
И, наконец, с чего началась история, он должен считывать данные из гуи.
Я бы и хотел не париться, но приходится :-)
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739571
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

Окей, тогда вопрос - что еще не работает, кроме вызова метода получения содержимого текстового поля?
Если все остальное работает, почему бы не обойтись передачей значения(обновлением какого-то поля объекта), а не ссылки на экземпляр объекта?
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739573
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Off: я и не подозревал, что меня так много в гугле в связи с этими закупками
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739576
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

Это называется - прозрачность))))
Хотя она напрямую от наглости заказчика зависит, к сожалению.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739579
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
smackmychi,
обновление гуи работает как ожидалось.
А вот поведение считывания оказалось странным. поэтому я и завел песню. Вы и Petro123 утверждаете, что все должно быть нормально. И, поскольку это говорят два человека, это повод серьезно задуматься, не накосячил ли я в чем-то другом. Что я сейчас и делалю. А другое, над чем я сейчас крепко размышляю, опять-таки по Вашему совету штамповать дочерние потоки только для процедуры обработки конкретного штрих-кода. Так что большое Вам спасибо за обсуждение.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739580
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В любом случае, я уже не имею отношения к закупкам на стороне заказчика. Скорее теперь на противоположной стороне.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739583
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

Вообщем, все что нарыл касается (a)syncExec

SWT: Respond to Long Running Tasks
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739584
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

По тексту увидите описание вашей проблемы.
Можете не париться, в общем, SWT однопоточен.
Там есть примеры.
Можете использовать то, что приведено и, конечно, свой класс(ы), в котором(ых) нужная логика будет реализована.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739589
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за внимание к проблеме и ценные советы.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739762
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

Вы хоть сообщите потом о результате своей деятельности в отношении данной проблемы.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739846
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
smackmychi,
хорошо. Обратите все же внимание, что в указанной Вами статье, как собственно и в тех, которые нарыл в свое время я, упомянутая мной ошибка описывается в результате обновления данных гуи, а не попыток считывания оных. Поэтому иного способа сделать сколько-нибудь удачно, кроме передачи-таки самих значений в конструкторе, и, как следствие, создание отдельного потока на каждую новую обработку штрих-кода я по-прежнему не вижу. Видимо придется переделать все в этом направлении.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739853
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

На данный момент без кода и опыта, и опытов мне не разобраться. Пишут, что любое изменение из потока отличного от потока SWT UI будет бросать исключение.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739855
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

По вашим же словам получается наоборот - методы, которые вносят изменения - не возбуждают исключение, тогда как метод получения содержимого поля вызывает.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739865
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

from stackoverflowTo allow background threads to perform operations on objects belonging to the UI-thread, the methods syncExec(Runnable runnable) and asyncExec(Runnable runnable) of Display are used. These are the only methods in SWT that can be called from any thread. They allow a runnable to be executed by the UI-thread , either synchronously, causing the background thread to wait for the runnable to finish, or asynchronously allowing the background thread to continue execution without waiting for the result. A runnable that is executed using syncExec() most closely matches the equivalent direct call to the UI operation because a Java method call always waits for the result before proceeding, just like syncExec().

Как я понимаю, таким образом можно запускать код на выполнение в потоке UI, чтобы иметь возможность с ним(UI) работать.
Поэтому можно же делать следующие вещи из вашего второго потока.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class NewClass{
    private String code;
  
    void someMethod(){
        //код метода run будет выполнен в потоке SWT UI
        Display.getDefault().asyncExec(new Runnable() {
            @Override
            public void run() {
                //получаем штрих-код
                code = Text.getText();
            }
        });
        //делаем запрос в базу данных, который выполнится во втором потоке
    }
}



Если
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739897
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот теперь мы говорим на одном языке :-)

Дойдя до этого кода я и залез с вопросом на этот форум.
Код: java
1.
code = Text.getText();



Основной вопрос здесь такой- что тут есть переменная code? Где она объявлена и какова ее область видимости?
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739900
gnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, был невнимателен к Вашему посту.
Я думал Вы только в следующем предложите выделить член класса.

В общем именно так у меня сейчас и реализовано. Но мне это не нравится. Эта переменная нужна очень ограниченный отрезок времени и необходимость резервирования для нее отдельного поля класса (а другого по-видимому просто нет) и наводит меня на мысль о том, что неверен сам подход.
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739908
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gnick,

Пока мне не приходит в голову другой метод получения из внутреннего класса данных.
Можно, конечно, так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
        StringBuffer buffer= new StringBuffer();
        Display.getDefault().syncExec(new Runnable() {
            @Override
            public void run() {
                //получаем штрих-код
                buffer.append(Text.getText());
            }
        });
...
Рейтинг: 0 / 0
Чтение gui из другого потока
    #38739909
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
smackmychi,

Опять же при объявлении таковой переменной, чтобы использовать ее во внутреннем классе нужно указать final
Простите, забыл
...
Рейтинг: 0 / 0
25 сообщений из 79, страница 3 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Чтение gui из другого потока
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]