Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > получить ссылку на обьект содержащий main() |
Автор: _Y_ 7.12.2011, 14:47 |
Как бы програмно получить ссылку на обьект содержащий main(). Программа может стартовать по-разному; т.е. имеется несколько классов, содержащих метод main(). Один из вариантов, конечно, сделать где-то статическую переменную public static Object mainObject; в которую при старте записывать ссылку на нужный класс. Но это как-то коряво получается. Нет ли возможности получить эту ссылку програмно? ЗЫ: Нарыл в старых темах http://forum.vingrad.ru/index.php?showtopic=289420&view=findpost&p=2083478, но оно, вроде, позволяет только узнать имя стартовавшего класса, но не получить ссылку на стартовавший обьект. |
Автор: Stolzen 7.12.2011, 14:54 |
Может есть что-то у JarClassLoader? Или у того класслоадера, который запускает приложение через entry point |
Автор: jk1 7.12.2011, 14:55 | ||
Какой объект? метод main статический, то есть принадлежит классу |
Автор: LSD 7.12.2011, 15:28 |
Если поток main() еще жив, то можно вызвать getStackTrace() из из него получит имя класса. Если он уже завершился, то надо получать строку запуска через API ОС. |
Автор: Stolzen 7.12.2011, 15:36 | ||
А как? |
Автор: _Y_ 7.12.2011, 15:41 |
Прошу прощения. Конечно так. Неграмотно сформулировал вопрос. А вот как его сформулировать..... Собственно, обычно main у меня первым делом создает экземпляр класса, в котором находится.... Но это, конечно, частный случай. Именно поэтому я и нашел приведенную выше ссылку на StackTrace. Если бы еще StackTrace позволял получить ссылки на вызывающие обьекты, задача была бы решена..... Пожалуй вопрос надо переформулировать так: Как из кода метода получить ссылки на вызвавшие его обьекты подобно тому как new Exception().getStackTrace() возвращает список их имен (да и не только имен)? Еще раз извиняюсь за формулировку. Добавлено через 1 минуту и 59 секунд LSD, main() у меня вечноживой, но нужно не имя класса, а именно ссылка на обьект, или, лучше ссылки на иерархию вызвавших данный код обьектов. |
Автор: jk1 7.12.2011, 15:56 |
Я бы рекомендовал трэкать такие объекты самому, то есть сохранять куда-то при старте. Как Вы сами говорите, создание объекта в результате вызова main это только частный случай, и наивно было бы ожидать тут поддержки со стороны API. И да, вместо new Exception().getStackTrace() можно использовать Thread.currentThread().getStackTrace(). Как-то поизящнее выглядит. |
Автор: _Y_ 7.12.2011, 18:57 | ||
Действительно изящнее.
Спасибо. Вопрос снят как дурацкий ![]() |