Обнаружение имени переменной компонента Swing во время выполнения

#java #swing

#java #swing

Вопрос:

Я не подаю в суд, если это вообще возможно, но у меня есть приложение Swing, в котором порядка четырех десятков разных меток, в которых мне приходится отслеживать ошибки, приложение, которое я изначально не писал, переменные, которые не определены статически в исходном коде, и у меня возникли проблемыточное отслеживание того, какая метка соответствует имени переменной в исходном коде.

Существуют ли какие-либо плагины или приложения, которые могут сообщать вам информацию об объектах Swing GUI во время работы приложения, включая имя переменной, если таковое имеется, на которое ссылается?

Ответ №1:

Вы не можете напрямую получить имя переменной объекта.

Если вы используете eclipse, вы можете создать условную точку останова в конструкторе JLabel, которая выполняет что-то вроде,

 this.putClientProperty("creation stack trace", new Exception());
  

Это позволит вам увидеть трассировку стека (и номер строки создания) каждого созданного JLabel.

Ответ №2:

На вашем месте я бы сделал это так:

  • открыть src.zip из java jdk и извлечь JLabel.java . Поместите его в свой проект.
  • измените этот класс:
    • добавьте поле с типом Throwable и в конце каждого конструктора напишите new Throwable() в него a .
    • в конце каждого конструктора добавьте в компонент новый прослушиватель щелчков мыши. Обработчику ничего не нужно делать, это просто для того, чтобы вы могли поместить в него точку останова.

Теперь, когда вы запускаете свое приложение, ваша измененная JLabel будет иметь приоритет над стандартной JDK. Если вы хотите найти точку в коде, где была создана какая-либо метка, установите точку останова в добавленном обработчике событий, щелкните эту метку и, когда отладчик приостановится, изучите стек в добавленном поле Throwable.

Не забудьте удалить свой пользовательский JLabel после завершения отладки и не отправлять его в рабочий код, так как создание Throwable() в каждом JLabel будет иметь негативные последствия для производительности.

Комментарии:

1. 1 Хорошее решение, если вы не можете получить доступ к исходному коду приложения. Но я думаю, что он может, поэтому я бы предпочел использовать отладчик GUI, как упоминалось в моем сообщении.

Ответ №3:

Если вы хотите только отлаживать и видеть, какой объект принадлежит какому компоненту в графическом интерфейсе, я бы рекомендовал использовать Swing Explorer для отладки.

Вы также можете расширить JLabel, добавить к нему функции отладки и заменить все JLabels в коде своей новой меткой «debugging».