![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Как бы програмно получить ссылку на обьект содержащий main().
Программа может стартовать по-разному; т.е. имеется несколько классов, содержащих метод main(). Один из вариантов, конечно, сделать где-то статическую переменную public static Object mainObject; в которую при старте записывать ссылку на нужный класс. Но это как-то коряво получается. Нет ли возможности получить эту ссылку програмно? ЗЫ: Нарыл в старых темах вот такое использование StackTrace, но оно, вроде, позволяет только узнать имя стартовавшего класса, но не получить ссылку на стартовавший обьект. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Может есть что-то у JarClassLoader? Или у того класслоадера, который запускает приложение через entry point
|
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Какой объект? метод main статический, то есть принадлежит классу -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
LSD |
|
|||
![]() 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. |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
||||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Прошу прощения. Конечно так. Неграмотно сформулировал вопрос. А вот как его сформулировать..... Собственно, обычно main у меня первым делом создает экземпляр класса, в котором находится.... Но это, конечно, частный случай. Именно поэтому я и нашел приведенную выше ссылку на StackTrace. Если бы еще StackTrace позволял получить ссылки на вызывающие обьекты, задача была бы решена..... Пожалуй вопрос надо переформулировать так: Как из кода метода получить ссылки на вызвавшие его обьекты подобно тому как new Exception().getStackTrace() возвращает список их имен (да и не только имен)? Еще раз извиняюсь за формулировку. Добавлено через 1 минуту и 59 секунд LSD, main() у меня вечноживой, но нужно не имя класса, а именно ссылка на обьект, или, лучше ссылки на иерархию вызвавших данный код обьектов. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Я бы рекомендовал трэкать такие объекты самому, то есть сохранять куда-то при старте. Как Вы сами говорите, создание объекта в результате вызова main это только частный случай, и наивно было бы ожидать тут поддержки со стороны API.
И да, вместо new Exception().getStackTrace() можно использовать Thread.currentThread().getStackTrace(). Как-то поизящнее выглядит. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну это уже зависит от ОС. В любом случае придется как-то через JNI вызывать ОС 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. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Действительно изящнее.
Спасибо. Вопрос снят как дурацкий ![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |