Получить существующий фрейм из имени класса без аргументов командной строки

public class Target extends javax.swing.JFrame {
    private Attacker[] FieldIWant;
    /* constructor and other stuff */
    public static void main(String args[]){
        new Target().setVisible(true);
    }
}

Есть ли способ получить FieldIWant для гарантированно единственного работающего экземпляра Target от объекта атакующего? У меня есть полные имена классов для обоих.

Все остальные методы, которые я нашел, либо дают мне только объект класса вместо экземпляра, либо требуют вмешательства в командную строку для включения JDI.

У нашего класса есть финальный проект, в котором участвуют роботы с оружием, которые не видят друг друга. Наш учитель слегка поощрял «взломать» бегуна, а мое мелкое «я» хочет подарить своему роботу глаза.

Невозможно попросить систему: «Пожалуйста, дайте мне каждый экземпляр этого класса». Неважно, что вы знаете, что есть только один. Вам придется написать в своих собственных исходных файлах Java некоторый код, например. назначьте это статическому полю.

rzwitserloot 30.05.2024 20:22

То есть нет способа сделать это без инициализации объекта в отдельном классе?

Aaron Liu 31.05.2024 18:29

В своем конструкторе вы можете назначить this полю. Обычно это плохая идея, но она часто встречается при создании графических интерфейсов.

rzwitserloot 31.05.2024 22:09

Я не могу изменить код класса Target, хотя политики безопасности допускают отражение. Вы хотите сказать, что я могу получить доступ к Target из внешнего класса this?

Aaron Liu 01.06.2024 23:02

Тогда ты ничего не сможешь сделать, Аарон Лю.

rzwitserloot 01.06.2024 23:48

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

Holger 10.06.2024 12:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку Target является подклассом javax.swing.JFrame. вы можете найти все его экземпляры в массиве, возвращаемом Frame.getFrames()

Если существуют другие экземпляры Frame или одного из его подклассов, вам придется перебрать массив и использовать instanceof для идентификации экземпляра Target.

Затем, чтобы получить доступ к полю private, вам придется использовать field = Target.class .getDeclaredField("FieldIWant"); и field.setAccessible(true);.

Видеть

Другие вопросы по теме