![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Народ, подскажите, как правильно пользоваться invoke?
Допустим я хочу через invoke выполнить вызов Obj.myMethod(); Что для этого надо сделать? java.lang.reflect.Method m=Obj.myMethod(); m.invoke(Obj.myMethod ); ? -------------------- |
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Конкретизирую вопрос...
Допустим у меня есть вызов auth.SteVisible(false); после этого идет операция с сетью, и етесственно объект auth как бы замораживается... т.е. перерисовки (скрытия) не происходит.
-------------------- |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Ну вот так, например
Для boolean будет соответственно boolean.class и new Boolean(false); http://www-106.ibm.com/developerworks/java...rary/j-dyn0603/ http://www-106.ibm.com/developerworks/java.../j-dyn0715.html Это сообщение отредактировал(а) Domestic Cat - 22.8.2004, 00:45 -------------------- |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Уже как то постил... Надеюсь поможет
Если пакет и классы уже есть класспасе, то делается все просто:
Добавлено @ 01:13 + еще была тема http://forum.vingrad.ru/index.php?showtopi...11&hl=getmethod |
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Domestic Cat Пасиб за пример. примерно таким путем и шел, но стопорнулся на классе типа boolean...
Теперь все стало на свои места. DarkDS Вот! Именно этот постинг я и искал по форуму... Пасиб! -------------------- |
|||
|
||||
| Alone |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Можно уточнить? Что за метод class у объекта MyClass ??? -------------------- |
||||
|
|||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Это статик переменная, которая идет от Object и инициализированная классом текущего объекта.
То есть class у MyClass инициализированна структурой java.reflection.Class, которая описывает MyClass Точно такую же структуру вернет вызов метода myClass.getClass(); |
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Насчет getClass согласен, а вот переменной class у моего объекта (public class authPanel extends javax.swing.JPanel ) нет.
-------------------- |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Она есть у всех объектов
Добавлено @ 15:50 А javax.swing.JPanel наследуется от объекта (не в прямую а через других родительские классы), как и все классы в яве. Так вот у объекта встроена статическая переменная класс |
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Блин...
Вот отрывок из кода
при выполнении получаем Exception e=object is not an instance of declaring class -------------------- |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
У тебя ошибка в m.invoke(_class, args);
Там должно быть m.invoke(auth, args); Так как первым аргументом должен быть инстансированный объект нужного тебе класса |
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Да, действительно.
Но поблема остается... метод setVisible(false) объекта auth не вызывается... Объект остается замороженным, до окончания работы с сетью. -------------------- |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
А на какой строке падает ?
|
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
с помощю дебага выяснил, что метод setVisible(false) вызывается, но не понимаю, почему объект не перерисовывается???
Добавлено @ 10:54 вот отладочный метод объекта auth, который я вызывал через invoke вместо setVisible(false)
в дебаговый вывод он мне пишет, что метод был вызван. Тоесть типа Ок. но до окончания работы с сетью (чтение/запись в сокет) это где то около 3-5сек объект остается на экране как и прежде, с нажатой кнопкой... -------------------- |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
У тебя работа с сетью идет в том же треде что и свинги работают?
|
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Нет. Для чтения сокета у меня отдельный тред.
Отправка в сокет идет, правда, в этом же треде... Это как то повлияет? Хотя отправляется очень малое кол-во байт... вот кусок кода
-------------------- |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Это у тебя происходит в каком то из Листенеров как я понимаю?
|
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
нет. это вызов по иерархии
main()->creatAllObjects()->prestart()->begin() -------------------- |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Просто такое чуство что твое ожидание ответа тормозит весь эвент кью. В итоге просто сообщения об обработки событий не доходят до назначения
|
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Здесь рефлекшн вообще не нужен, он ведь делаeт то же самое что и просто setVisible().
А что проиcxодит в этом самом auth? Проблема здесь не в потоке, который вызывает setVisible(), а в другом треде. Может код для него посмотрим? -------------------- |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Скорее всего проблемма вот в этом:
То есть программа не выходит из этой процедуры. А если это работает в одном треде с евент кью, то скорее всего сам эвент кью будет заторможен |
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Тоесть получается нельзя располагать в одном треде invoke и obj.wait() ???
И еще: если можно, на пальцах, что такое рефлексия? -------------------- |
|||
|
||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Я так понял, что проблема в том, что вызов setVisible() не дает желаемого результата.
Поскольку он идет до synchronized, то synchronized никак на него не влияет. Еще раз - проблема в замораживании треда с synchronized, или с бездействием setVisible? Добавлено @ 16:56
Да почему нельзя? Можно.
Рефлекшн нужен чтобы: -Determine the class of an object. -Get information about a class's modifiers, fields, methods, constructors, and superclasses. -Find out what constants and method declarations belong to an interface. -Create an instance of a class whose name is not known until runtime. -Get and set the value of an object's field, even if the field name is unknown to your program until -runtime. -Invoke a method on an object, even if the method is not known until runtime. -Create a new array, whose size and component type are not known until runtime, and then modify the array's components. -------------------- |
||||
|
|||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
еще до использования synchronized, setVisible нормально отрабатывал только после завершения операций с сетью. Тоесть на несколько секунд происходит замораживание объекта auth с состоянием нажатой кнопки...
объект представлен в виде панели с авторизационной формочкой и кнопкой после чтения данных с сокета и их обработки, объект благополучно исчезает и прорисовывается следующий... Вот это меня и злит... Хотя действия выполняются последовательно. Код в топике приведен. Я хочу найти такй способ , чтоб мои объекты прорисовывались независимо от сетевых задержек (там где это присутствует) -------------------- |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
А можно весь код для auth? Здесь есть только метод Hide
-------------------- |
|||
|
||||
| Alone |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Там в принципе ничего такого...
Метод Hide я делал для отладки, когда с invoke тренировался... Он не нужен. там прямой вызов auth.setVisible(false) вот как выполняется код:
часть кода из auth
При удачной авторизации возвращаемся в майн код
Это сообщение отредактировал(а) Alone - 26.8.2004, 17:49 -------------------- |
||||||
|
|||||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Происходит из Эвент кью. То есть у тебя при вызове аутн юзер ожидается завершения этой процидуры (то есть считывание данных) Это значит что ДО того как считается - ничего прорисовыватся не будет. Добавлено @ 18:40 По идее самый простой способ - запустить инвок лайтер и из него при успешной авторизации закрывать окно. Вечером (часа через 3) могу примерный код набросать... Добавлено @ 18:42 Кстати... Другой вариант - запустить майн.бегин в инвок лайтер. Правда какими пост эффектами это обернется - нужно подумать Это сообщение отредактировал(а) DarkDS - 26.8.2004, 18:47 |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Решение (по-моему) такое: вынести код с synchronized в отдельный тред.
DarkDS прав, поток не успевает обработать евент до synchronized. -------------------- |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Просто сам в начале изучения на такие грабли не раз и не два напарывался... |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Ну так ... Тоже напарывался - первый раз когда прогресс бар замирал и прорисовывался до
100% только после выполнения треда. Все равно забывается... Это сообщение отредактировал(а) Domestic Cat - 26.8.2004, 18:59 -------------------- |
|||
|
||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Ребята, хоть я и начинающий
Когда происходит вызов аутн, то первичные операции с сетью происходят внутри функции аутн(){ conn.connect(); conn.send(); authuser(); которая в свою очередь производит считывание данных с сокета, и если пришло "Ок", то вызывает begin(); }
Естественно. Но считывание то как раз здесь и заканчивается и в метод begin мы попадаем только после отсылки авторизации и получения ответа от сервера. На этом операции с сетью прекращаются. Потом я пытаюсь убрать с экрана объект аутн и продолжать операции с сетью. (подгрузка остальных данных...) -------------------- |
|||
|
||||
| DarkDS |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Объясняю по порядку.
Насколько я понимаю, onOk() вызывается при нажатии на кнопку (то есть из эвент листенера) и вызывается не через Инвок Лайтер. Значит до завершения этого метода весь Эвент Кью становится колом. Далее. Из онОк мы вызываем AuthUser(loginFld.getText(), passwdFld.getPassword().toString() ); То есть для завершения онОк мы ждем чтобы выполнилось AuthUser. В AuthUser есть такой участвок:
Значит при удачной ауторизации мы ждем когда закончится работа mainObj.begin(); Далее:
То есть у тебя ничего не будет прорисованно до тех пор, пока все не считается... Вопросы есть? |
||||
|
|||||
| Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 3 Всего: 6 |
Блин... И крыть нечем...
тогда нужна архитектурная переработка. Хорошо, ребята, Пасиб за помощь... Думаю топик мона закрывать. -------------------- |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |