From 0a4f23484154e960abe08a9f03ce7c1d7d5a8982 Mon Sep 17 00:00:00 2001 From: Konloch Date: Tue, 6 Jul 2021 16:53:37 -0700 Subject: [PATCH] Thread Cleanup --- .../club/bytecodeviewer/BytecodeViewer.java | 132 ++++++++---------- .../bytecodeviewer/util/InstallFatJar.java | 41 ++++++ .../club/bytecodeviewer/util/PingBack.java | 25 ++++ 3 files changed, 122 insertions(+), 76 deletions(-) create mode 100644 src/main/java/the/bytecode/club/bytecodeviewer/util/InstallFatJar.java create mode 100644 src/main/java/the/bytecode/club/bytecodeviewer/util/PingBack.java diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java index beb6a756..d6cb81ce 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java @@ -1,11 +1,9 @@ package the.bytecode.club.bytecodeviewer; -import java.awt.event.KeyEvent; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -13,7 +11,6 @@ import javax.swing.*; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import me.konloch.kontainer.io.HTTPRequest; import org.apache.commons.io.FileUtils; import org.objectweb.asm.tree.ClassNode; import the.bytecode.club.bootloader.Boot; @@ -128,46 +125,9 @@ public class BytecodeViewer public static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); public static final boolean EXPERIMENTAL_TAB_CODE = false; public static final boolean DEV_MODE = false; //if true error streams as preserved - - /** - * The version checker thread - */ private static final Thread versionChecker = new Thread(new VersionChecker(), "Version Checker"); - - /** - * Pings back to bytecodeviewer.com to be added into the total running statistics - */ - private static final Thread pingBack = new Thread(() -> { - try { - new HTTPRequest(new URL("https://bytecodeviewer.com/add.php")).read(); - } catch (Exception e) { - Configuration.pingback = false; - } - }, "Pingback"); - - /** - * Downloads & installs the krakatau & enjarify zips - */ - private static final Thread installFatJar = new Thread(() -> { - try { - if (OFFLINE_MODE) { - Boot.dropKrakatau(); - Boot.dropEnjarify(); - } else { - Boot.populateUrlList(); - Boot.populateLibsDirectory(); - Boot.downloadZipsOnly(); - Boot.checkKrakatau(); - Boot.checkEnjarify(); - } - } catch (Exception e) { - e.printStackTrace(); - } - }, "Install Fat-Jar"); - - /** - * Used to check incase booting failed for some reason, this kicks in as a fail safe - */ + private static final Thread pingBack = new Thread(new PingBack(), "Pingback"); + private static final Thread installFatJar = new Thread(new InstallFatJar(), "Install Fat-Jar"); private static final Thread bootCheck = new Thread(new BootCheck(), "Boot Check"); /** @@ -178,10 +138,15 @@ public class BytecodeViewer public static void main(String[] args) { BytecodeViewer.args = args; + + //welcome message System.out.println("https://the.bytecode.club - Created by @Konloch - Bytecode Viewer " + VERSION + ", " + "Fat-Jar: " + FAT_JAR); + + //set the security manager System.setSecurityManager(sm); - try { + try + { //precache settings file SettingsSerializer.preloadSettingsFile(); //setup look and feel @@ -212,20 +177,25 @@ public class BytecodeViewer if (CLI == CommandLineInput.STOP) return; - if (!FAT_JAR) { + if (!FAT_JAR) + { bootCheck.start(); Boot.boot(args, CLI != CommandLineInput.OPEN_FILE); - } else + } + else installFatJar.start(); if (CLI == CommandLineInput.OPEN_FILE) BytecodeViewer.boot(false); - else { + else + { BytecodeViewer.boot(true); CommandLineInput.executeCommandLine(args); } - } catch (Exception e) { + } + catch (Exception e) + { new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e); } } @@ -270,37 +240,37 @@ public class BytecodeViewer openFiles(new File[]{new File(s)}, true); } - /** - * because Smali and Baksmali System.exit if it failed - * - * @param i - */ - public static void exit(int i) { - - } - /** * Returns the java command it can use to launch the decompilers * * @return */ - public static synchronized String getJavaCommand() { - try { - sm.stopBlocking(); + public static synchronized String getJavaCommand() + { + sm.stopBlocking(); + try + { ProcessBuilder pb = new ProcessBuilder("java", "-version"); pb.start(); - sm.setBlocking(); return "java"; //java is set - } catch (Exception e) { //ignore + } + catch (Exception e) //ignore + { sm.setBlocking(); boolean empty = Configuration.java.isEmpty(); - while (empty) { - showMessage("You need to set your Java path, this requires the JRE to be downloaded." + nl + - "(C:/Program Files/Java/JDK_xx/bin/java.exe)"); + while (empty) + { + showMessage("You need to set your Java path, this requires the JRE to be downloaded." + + nl + "(C:/Program Files/Java/JDK_xx/bin/java.exe)"); viewer.selectJava(); empty = Configuration.java.isEmpty(); } } + finally + { + sm.setBlocking(); + } + return Configuration.java; } @@ -319,7 +289,8 @@ public class BytecodeViewer * @param name the class name * @return the ClassNode instance */ - public static ClassNode getClassNode(String name) { + public static ClassNode getClassNode(String name) + { for (FileContainer container : files) for (ClassNode c : container.classes) if (c.name.equals(name)) @@ -328,7 +299,8 @@ public class BytecodeViewer return null; } - public static FileContainer getFileContainer(String name) { + public static FileContainer getFileContainer(String name) + { for (FileContainer container : files) if (container.name.equals(name)) return container; @@ -340,7 +312,8 @@ public class BytecodeViewer return files; } - public static ClassNode getClassNode(FileContainer container, String name) { + public static ClassNode getClassNode(FileContainer container, String name) + { for (ClassNode c : container.classes) if (c.name.equals(name)) return c; @@ -549,6 +522,18 @@ public class BytecodeViewer { viewer.clearBusyStatus(); } + + /** + * Refreshes the title on all of the opened tabs + */ + public static void refreshAllTabTitles() + { + for(int i = 0; i < BytecodeViewer.viewer.workPane.tabs.getTabCount(); i++) + { + ResourceViewer viewer = ((TabbedPane) BytecodeViewer.viewer.workPane.tabs.getTabComponentAt(i)).resource; + viewer.refreshTitle(); + } + } /** * Resets the workspace with optional user input required @@ -596,14 +581,9 @@ public class BytecodeViewer } /** - * Refreshes the title on all of the opened tabs + * because Smali and Baksmali System.exit if it failed + * + * @param i */ - public static void refreshAllTabTitles() - { - for(int i = 0; i < BytecodeViewer.viewer.workPane.tabs.getTabCount(); i++) - { - ResourceViewer viewer = ((TabbedPane) BytecodeViewer.viewer.workPane.tabs.getTabComponentAt(i)).resource; - viewer.refreshTitle(); - } - } + public static void exit(int i) { } } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/util/InstallFatJar.java b/src/main/java/the/bytecode/club/bytecodeviewer/util/InstallFatJar.java new file mode 100644 index 00000000..39a101e8 --- /dev/null +++ b/src/main/java/the/bytecode/club/bytecodeviewer/util/InstallFatJar.java @@ -0,0 +1,41 @@ +package the.bytecode.club.bytecodeviewer.util; + +import the.bytecode.club.bootloader.Boot; + +import static the.bytecode.club.bytecodeviewer.Constants.OFFLINE_MODE; + +/** + * Downloads & installs the krakatau & enjarify zips + * + * Alternatively if OFFLINE_MODE is enabled it will drop the Krakatau and Enjarify versions supplied with BCV + * + * @author Konloch + * @since 7/6/2021 + */ +public class InstallFatJar implements Runnable +{ + @Override + public void run() + { + try + { + if (OFFLINE_MODE) + { + Boot.dropKrakatau(); + Boot.dropEnjarify(); + } + else + { + Boot.populateUrlList(); + Boot.populateLibsDirectory(); + Boot.downloadZipsOnly(); + Boot.checkKrakatau(); + Boot.checkEnjarify(); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/util/PingBack.java b/src/main/java/the/bytecode/club/bytecodeviewer/util/PingBack.java new file mode 100644 index 00000000..3d8154d0 --- /dev/null +++ b/src/main/java/the/bytecode/club/bytecodeviewer/util/PingBack.java @@ -0,0 +1,25 @@ +package the.bytecode.club.bytecodeviewer.util; + +import me.konloch.kontainer.io.HTTPRequest; +import the.bytecode.club.bytecodeviewer.Configuration; + +import java.net.URL; + +/** + * Pings back to bytecodeviewer.com to be added into the total running statistics + * + * @author Konloch + * @since May 1, 2015 + */ +public class PingBack implements Runnable +{ + @Override + public void run() + { + try { + new HTTPRequest(new URL("https://bytecodeviewer.com/add.php")).read(); + } catch (Exception e) { + Configuration.pingback = false; + } + } +}