Программа просмотра Java-классов (Java Class Viewer) - Добавление обработанного класса к элементу управления Swing
ОГЛАВЛЕНИЕ
Добавление обработанного класса к элементу управления Swing
Чтобы снизить затраты сил на написание программы просмотрщика Java-классов, jCFL предоставляет набор элементов управления интерфейсом.
1. Элемент управления Tree для создания иерархии компонентов файла класса
Класс org.freeinternals.classfile.ui.JTreeClassFile является подклассом JTree, который принимает объект ClassFile в конструкторе. Он добавить все компоненты класса в элемент управления tree.
2. Контейнер для интерактивной бинарной программы просмотра файлов классов
Класс org.freeinternals.classfile.ui.JSplitPaneClassFile является подклассом JSplitPane, который разделен на две панели: левая панель является JTreeClassFile, а правая - это двоичный просмотрщик файла класса.
В то время как мы выбираем каждую компоненту в дереве, соответствующие байты будут подсвечены - потому у нас все интерактивно.
// JavaClassViewer.src.zip - org.freeinternals.javaclassviewer.Main.open_ClassFile()
private JSplitPaneClassFile cfPane;
private void open_ClassFile(final File file) {
this.cfPane = new JSplitPaneClassFile(Tool.readClassFile(file));
this.add(this.cfPane, BorderLayout.CENTER);
this.resizeForContent();
}
К примеру, после открытия класса File.class (java.io.File), при нашем выборе узла для метода getName(), соответствующие байты будут подсвечены.
Если мы выберем узел name_index, descriptor_index для данного метода, то только секция индексов (для значения 119, 24) будет подсвечена.
Если мы выберем узел code в атрибуте Code, и откроем закладку Opcode, то все машинные коды данного метода будут извлечены.
Программа просмотра классов Java не предназначена для декомпиляции, она только отображает чистый код и некоторые комментарии соответственно контексту. Вы можете обратиться к спецификации JVM для нахождения значений операционных кодов - ведь извлеченные коды частично читабельны.
3. Элемент управления Tree для ZipFile (jar, war, etc.)
Класс org.freeinternals.classfile.ui.JTreeZipFile является подклассом JTree, который принимает ZipFile в конструкторе. Он построит дерево для всех записей в zip-файла. Файл .jar/.war сам по себе также является zip-файлом.
// JavaClassViewer.src.zip - org.freeinternals.javaclassviewer.Main.open_JarFile()
// Здесь осталась только ключевая логика
private JTreeZipFile zftree;
private void open_JarFile(final File file) {
this.zftree = new JTreeZipFile(new JarFile(file, false, JarFile.OPEN_READ));
this.zftreeContainer = new JPanelForTree(this.zftree);
this.add(this.zftreeContainer, BorderLayout.CENTER);
this.resizeForContent();
}
А вот как выглядит элемент управления Tree ZipFile.
Также, если мы дважды щелкнем по узлу xxxxx.class, то будет открыто новое окно для файла класса.