|
|
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, Есть вопрос по поводу Код: java 1. Насколько я могу судить по этому: from stackoverflow Everything executed in (a)syncExec is using the display thread and therefore blocking your UI until it returns. I suggest you use Eclipse Jobs. This will use the progress indicator that the workbench already offers out of the box. Все что исполняется ч/з (a)syncExec будет использовать поток дисплея(?) и поэтому будет блокировать пользовательский интерфейс. Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 22:39 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
Ну а я отвечал о наследовании от Thread. Есть ли разница в контексте рассматриваемого вопроса? Код: java 1. А вот вызывать сам конструктор здесь мне даже в голову не приходило. Спасибо за мысль, это надо обдумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 22:41 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
smackmychi Все что исполняется ч/з (a)syncExec будет использовать поток дисплея(?) и поэтому будет блокировать пользовательский интерфейс. Как-то так. Вот это-то как раз не является неожиданным. Это, как я понимаю, аналогично делфийскому Synchronized(UpdateCaption). Не страшно, т.к. действия тут минимальны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 22:44 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, В контексте вопроса - без понятия. Знаю лишь, что, когда еще в универе начал изучать яву, сразу натолкнулся про совет реализовывать Runnable , а не расширять Thread . Опыта с многопоточностью пока толком не имел, ничего сказать не могу. Контекста то же не шибко усматриваю. Вообще, как могу полагать, здесь хватит анонимного экземпляра класса. Максимум, ссылка на экземпляр. А уж как вам этот поток запускать (ч/з (a)syncExec или ч/з new Thread(<экземпляр класса>) ) решать только вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 22:48 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, забыл, конечно же new Thread(...).start() ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 22:52 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
авторDisplay.getDefault().asyncExec(new NewClass(MyTextField)); Присмотревшись к этому коду я начинаю понимать, что метод run нового потока (т.е. все, что делает новый поток) будет перенесено в контекст основного потока. Как бы это не совсем то, чего хотелось бы :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 22:56 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, А если использовать Код: java 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 22:59 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
То тогда приходим к тому, с чего начали. Ссылку на компонент передадим. Объект потока создадим. При попытке реально считать текст из компонента без AsyncExec отхватим "invalid thread access". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:03 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, в run только текст в ГУИ выкинуть. Вот болванка Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:04 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, Забавно все это. У меня-то все что есть это JFrame. В обработчике нажатия кнопки JButton Код: java 1. В NewClass run(): Код: java 1. - и все ок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:10 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
Petro123, так, этот вариант я вроде бы тоже обдумывал, но, допустим, теперь пользователь изменяет значение текстового поля и мне надо записать туда новое значение. такое объявление переменной Код: java 1. ..... позволит мне в дальнейшем повторно вызвать: Код: java 1. 2. 3. 4. 5. 6. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:14 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, Давайте еще раз уточним. Есть текстовое поле ввода. Есть БД. Необходимо формировать и посылать запрос к БД на основе содержимого текстового поля. Чтобы интерфейс пользователя не зависал на время выполнения запроса, необходимо запускать выборку в отдельном потоке. Так? Если так, то какие проблемы? Описываем класс, который реализует Runnable, в конструктор передаем ссылки на нужные объекты интерфейса, в которые можно будет записать данные, которые вернет запрос к БД. Про конструктор кстати и мог говорить Petro123 Petro123gnick, в общем виде, перед стартом потока - собрать и дать ему все данные для работы. Чтобы потом не тормозить его. И после этого использовать экземпляр данного класса как и было сказано раньше. Ч/з тот же SwingUtilities.invokeLater(<экземпляр класса>); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:22 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
smackmychi, нет, не так :-) Чесно говоря, я больше не осилю объяснение причин, по которым мне нужен второй поток, выше по тексту я уже написал все, что могу сказать по этому поводу. Код: java 1. Это будет означать, что мне надо на каждый новый штрих-код стартовать отдельный поток. Может быть и стоит так поступить, но это будет означать существенное перепроектирование структуры программы. Пока я хотел обойтись двумя потоками- один гуи- управляющий- обрабатывает сообщения операционной системы и юзера и управляет запуском остановкой второго потока обработки. А проблема лишь в том, повторюсь в очередной раз, что второй поток должен считывать данные из компонентов гуи, созданных в главном потоке, и делать это регулярно, а потому не только и не столько в конструкторе объекта потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:33 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, Опять же, если вы решили сделать заполнение полей ввода по шагам Почему бы не описать класс следующим образом. Код: 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. В итоге: мы можем передавать в конструктор класса два экземпляра на поля ввода. То, которое содержит штрих-код и то, в которое нужно вывести данные результата запроса. Например: Код: java 1. 2. 3. Таким образом можно и изменять доступность элементов для заполнения. Другой вопрос - организовать метод, который будет вызываться при нажатии на кнопку, и который будет в зависимости от шага обрабатывать другие поля ввода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:33 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
smackmychi, +1 единственно мне непонятна событийная модель ....при его "окно на JS браузера нет доступа к коду". Т.е. для старта запроса-потока при изменении текста нужно получить событие этого изменения. TextEdit.onChange в Delphi )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:36 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, Кажется, я что-то упустил. О каком именно втором потоке речь? Если хотите использовать один экземпляр класса реализующего Runnable, или реализующего Thread, то придется использовать класс, который является расширением Thread, в котором добавить метод обновления ссылки на поле ввода. И на новом шаге после обновления ссылки ч/з метод, например, MyThread.setTextField(..), снова запускать поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:37 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
smackmychi, к сожалению мы ходим по кругу. Я снова вынужден повториться: Код: java 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:38 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, У вас в любом случае будет создавать каждый раз новый экземпляр класса потока. Но это же не говорит о том, что за единицу времени потоков будет больше два (если только вы не забудете отключать кнопку создающую поток, до завершения уже созданного потока) P.S.: очень удивился, когда загуглил ваше мыло. Надеюсь, поставщики по госзакупкам не сильно наглеют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:40 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
Petro123, Может действительно проще разобраться почему у человека бросается исключение? Ведь мы одно и то же ему предложили))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:41 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnickМожет быть и стоит так поступить, но это будет означать существенное перепроектирование структуры программы. веский довод - надо всё переписать. автори делать это регулярно - регулярно делает работу Основной поток ГУИ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:41 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, Хорошо, фиг с ним с тексовым полем. Что не так со значением? Почему вы считаете, что при нажатии на кнопку нельзя в поток передать значение, которое действительно на момент нажатия кнопки? Ну, введен штирх-код. При нажатии передаем в конструктор и запоминаем в поле класса это значение. В методе run формируем запрос и используем это значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:43 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
smackmychiPetro123, Может действительно проще разобраться почему у человека бросается исключение? Ведь мы одно и то же ему предложили))) пусть выложит минимальный рабочий код. Но я пас ))))). Не моя область JTextField )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:44 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
Petro123, опять не врубился, увы. Код: java 1. 2. 3. Это зачем? Поток отрабатывает с одним штрих кодом и встает ( wait(), ожидая новый ) Пользователь сканирует новый штрих-код и нажимает Продолжить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:46 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
Petro123, Да там от JTextField один только метод нужен, ну, максимум два. Я просто не знаток потоков и не могу сказать, почему исключение кидается именно в том месте и тут, действительно, нужен код. Нюансы хоть погуглить на основании чего-то будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:46 |
|
||
|
Чтение gui из другого потока
|
|||
|---|---|---|---|
|
#18+
gnick, А зачем ему ожидать? Зачем закручивать всю логику на одном потоке? Пускай у вас поток будет выполнять только действия связанные с запросом, а состояние остальных компонент интерфейса меняйте по какому-нибудь счетчику шага что ли и в другом методе вообще. Для вас поток должен быть как бы изоляцией от потока, в котором идет отрисовка и не более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 23:49 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38739526&tid=2126634]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
196ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 563ms |

| 0 / 0 |
