#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 . - в конце каждого конструктора добавьте в компонент новый прослушиватель щелчков мыши. Обработчику ничего не нужно делать, это просто для того, чтобы вы могли поместить в него точку останова.
- добавьте поле с типом Throwable и в конце каждого конструктора напишите
Теперь, когда вы запускаете свое приложение, ваша измененная JLabel будет иметь приоритет над стандартной JDK. Если вы хотите найти точку в коде, где была создана какая-либо метка, установите точку останова в добавленном обработчике событий, щелкните эту метку и, когда отладчик приостановится, изучите стек в добавленном поле Throwable.
Не забудьте удалить свой пользовательский JLabel после завершения отладки и не отправлять его в рабочий код, так как создание Throwable() в каждом JLabel будет иметь негативные последствия для производительности.
Комментарии:
1. 1 Хорошее решение, если вы не можете получить доступ к исходному коду приложения. Но я думаю, что он может, поэтому я бы предпочел использовать отладчик GUI, как упоминалось в моем сообщении.
Ответ №3:
Если вы хотите только отлаживать и видеть, какой объект принадлежит какому компоненту в графическом интерфейсе, я бы рекомендовал использовать Swing Explorer для отладки.
Вы также можете расширить JLabel, добавить к нему функции отладки и заменить все JLabels в коде своей новой меткой «debugging».