Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить ссылку на обьект содержащий main(), имеется несколько классов c main 
V
    Опции темы
_Y_
Дата 7.12.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Как бы програмно получить ссылку на обьект содержащий main().

Программа может стартовать по-разному; т.е. имеется несколько классов, содержащих метод main(). Один из вариантов, конечно, сделать где-то статическую переменную
public static Object mainObject;
в которую при старте записывать ссылку на нужный класс. Но это как-то коряво получается. 

Нет ли возможности получить эту ссылку програмно?

ЗЫ: Нарыл в старых темах вот такое использование StackTrace, но оно, вроде, позволяет только узнать имя стартовавшего класса, но не получить ссылку на стартовавший обьект.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Stolzen
Дата 7.12.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Может есть что-то у JarClassLoader? Или у того класслоадера, который запускает приложение через entry point


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
jk1
Дата 7.12.2011, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

позволяет только узнать имя стартовавшего класса, но не получить ссылку на стартовавший обьект


Какой объект? метод main статический, то есть принадлежит классу


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
LSD
Дата 7.12.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Если поток main() еще жив, то можно вызвать getStackTrace() из из него получит имя класса. Если он уже завершился, то надо получать строку запуска через API ОС.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Stolzen
Дата 7.12.2011, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Цитата(LSD @  7.12.2011,  16:28 Найти цитируемый пост)
Если он уже завершился, то надо получать строку запуска через API ОС.

А как?



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
_Y_
Дата 7.12.2011, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(jk1 @  7.12.2011,  14:55 Найти цитируемый пост)
Какой объект? метод main статический, то есть принадлежит классу 


Прошу прощения. Конечно так. Неграмотно сформулировал вопрос. А вот как его сформулировать.....

Собственно, обычно  main у меня первым делом создает экземпляр класса, в котором находится.... Но это, конечно, частный случай.

Именно поэтому я и нашел приведенную выше ссылку на StackTrace. Если бы еще StackTrace позволял получить ссылки на вызывающие обьекты, задача была бы решена.....

Пожалуй вопрос надо переформулировать так:
Как из кода метода получить ссылки на вызвавшие его обьекты подобно тому как new Exception().getStackTrace() возвращает список их имен (да и не только имен)?

Еще раз извиняюсь за формулировку.

Добавлено через 1 минуту и 59 секунд
LSD, main() у меня вечноживой, но нужно не имя класса, а именно ссылка на обьект, или, лучше ссылки на иерархию вызвавших данный код обьектов.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
jk1
Дата 7.12.2011, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Я бы рекомендовал трэкать такие объекты самому, то есть сохранять куда-то при старте. Как Вы сами говорите, создание объекта в результате вызова main это только частный случай, и наивно было бы ожидать тут поддержки со стороны API.

И да, вместо new Exception().getStackTrace() можно использовать Thread.currentThread().getStackTrace(). Как-то поизящнее выглядит.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
LSD
Дата 7.12.2011, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Stolzen @  7.12.2011,  16:36 Найти цитируемый пост)
А как?

Ну это уже зависит от ОС. В любом случае придется как-то через JNI вызывать ОС API.



Цитата(_Y_ @  7.12.2011,  16:41 Найти цитируемый пост)
нужно не имя класса, а именно ссылка на обьект, или, лучше ссылки на иерархию вызвавших данный код обьектов

Никак не получить. Если бы так можно было бы сделать, то это была бы дыра в безопасности.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
_Y_
Дата 7.12.2011, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(jk1 @  7.12.2011,  15:56 Найти цитируемый пост)
Thread.currentThread().getStackTrace(). Как-то поизящнее выглядит.


Действительно изящнее.


Цитата(LSD @  7.12.2011,  17:19 Найти цитируемый пост)
Если бы так можно было бы сделать, то это была бы дыра в безопасности. 


Спасибо. Вопрос снят как дурацкий  smile 




--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0813 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.