1111import java .awt .event .MouseEvent ;
1212import java .awt .event .WindowAdapter ;
1313import java .awt .event .WindowEvent ;
14+ import java .io .BufferedReader ;
1415import java .io .File ;
1516import java .io .FileInputStream ;
1617import java .io .IOException ;
18+ import java .io .InputStreamReader ;
1719import java .io .OutputStream ;
1820import java .io .PrintStream ;
1921import java .net .URL ;
@@ -51,6 +53,7 @@ public class DeobfuscatorFrame
5153 private DefaultListModel <String > librariesList ;
5254 private File libraryPath ;
5355 private Thread thread ;
56+ private Process process ;
5457
5558 /**
5659 * The singleton instance of URLClassLoader
@@ -63,7 +66,6 @@ public class DeobfuscatorFrame
6366 private List <Class <?>> transformerClasses = new ArrayList <>();
6467
6568 /**
66- * If it is legacy mode, has Deobfuscator.class and Transformer.class
6769 * If its new mode, has Deobfuscator.class, Configuration.class, TransformerConfigDeserializer.class, and Transformer.class
6870 */
6971 private Class <?>[] loadClasses ;
@@ -594,10 +596,80 @@ public void run()
594596 {
595597 e .printStackTrace (print );
596598 }
597-
598599 }else
599600 {
600-
601+ btnRun .setEnabled (false );
602+ // Converts the above into args
603+ List <String > command = new ArrayList <>();
604+ command .add ("java" );
605+ command .add ("-jar" );
606+ command .add (deobfuscatorField .getText ());
607+ command .add ("-input" );
608+ command .add (inputField .getText ());
609+ command .add ("-output" );
610+ command .add (outputField .getText ());
611+ for (int i = 0 ; i < selectedTransformers .getSize (); i ++)
612+ {
613+ command .add ("-transformer" );
614+ command .add (selectedTransformers .get (i ));
615+ }
616+ for (int i = 0 ; i < librariesList .getSize (); i ++)
617+ {
618+ command .add ("-path" );
619+ command .add (librariesList .get (i ));
620+ }
621+ // Start
622+ ProcessBuilder builder = new ProcessBuilder (command );
623+ JFrame newFrame = new JFrame ();
624+ newFrame .setTitle ("Console" );
625+ JTextArea area = new JTextArea ();
626+ area .setEditable (false );
627+ newFrame .getContentPane ().add (new JScrollPane (area ));
628+ newFrame .pack ();
629+ newFrame .setSize (800 , 600 );
630+ newFrame .setVisible (true );
631+ SwingWorker <Void , String > worker = new SwingWorker <Void , String >()
632+ {
633+ @ Override
634+ protected Void doInBackground () throws Exception
635+ {
636+ builder .redirectErrorStream (true );
637+ Process process = builder .start ();
638+ DeobfuscatorFrame .this .process = process ;
639+ BufferedReader reader = new BufferedReader (
640+ new InputStreamReader (process .getInputStream ()));
641+ String line ;
642+ while ((line = reader .readLine ()) != null )
643+ publish (line );
644+ return null ;
645+ }
646+
647+ @ Override
648+ protected void process (List <String > chunks )
649+ {
650+ for (String line : chunks )
651+ {
652+ area .append (line );
653+ area .append ("\n " );
654+ }
655+ }
656+ };
657+ worker .execute ();
658+ newFrame .addWindowListener (new WindowAdapter ()
659+ {
660+ @ Override
661+ public void windowClosing (WindowEvent e )
662+ {
663+ btnRun .setEnabled (true );
664+ worker .cancel (true );
665+ if (process != null )
666+ {
667+ process .destroyForcibly ();
668+ process = null ;
669+ }
670+ e .getWindow ().dispose ();
671+ }
672+ });
601673 }
602674 }
603675 });
@@ -665,13 +737,6 @@ private void loadTransformers(String path, JLabel displayLabel)
665737 DEOBFUSCATOR_VERSION = DeobfuscatorVersion .NEW ;
666738 }
667739 }
668- if (DEOBFUSCATOR_VERSION == DeobfuscatorVersion .LEGACY )
669- {
670- loadClasses = new Class <?>[2 ];
671- loadClasses [0 ] = new URLClassLoader (new URL []{new URL (path )}).
672- loadClass ("com.javadeobfuscator.deobfuscator.Deobfuscator" );
673- loadClasses [1 ] = loader .loadClass ("com.javadeobfuscator.deobfuscator.transformers.Transformer" );
674- }
675740 zip .close ();
676741 displayLabel .setText ("Successfully loaded transformers!" );
677742 displayLabel .setForeground (Color .GREEN );
0 commit comments