1 21 package proguard.gui; 22 23 import java.awt.Cursor ; 24 import java.io.*; 25 26 import javax.swing.*; 27 28 import proguard.retrace.ReTrace; 29 30 31 38 class ReTraceRunnable implements Runnable 39 { 40 private JTextArea consoleTextArea; 41 private boolean verbose; 42 private File mappingFile; 43 private String stackTrace; 44 45 46 53 public ReTraceRunnable(JTextArea consoleTextArea, 54 boolean verbose, 55 File mappingFile, 56 String stackTrace) 57 { 58 this.consoleTextArea = consoleTextArea; 59 this.verbose = verbose; 60 this.mappingFile = mappingFile; 61 this.stackTrace = stackTrace; 62 } 63 64 65 67 public void run() 68 { 69 consoleTextArea.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 70 consoleTextArea.setText(""); 71 72 InputStream oldIn = System.in; 75 PrintStream oldOut = System.out; 76 PrintStream oldErr = System.err; 77 78 ByteArrayInputStream inputStream = 79 new ByteArrayInputStream(stackTrace.getBytes()); 80 81 PrintStream printStream = 82 new PrintStream(new TextAreaOutputStream(consoleTextArea), true); 83 84 System.setIn(inputStream); 85 System.setOut(printStream); 86 System.setErr(printStream); 87 88 try 89 { 90 ReTrace reTrace = new ReTrace(verbose, 92 mappingFile); 93 94 reTrace.execute(); 96 } 97 catch (Exception ex) 98 { 99 System.out.println(ex.getMessage()); 101 102 MessageDialogRunnable.showMessageDialog(consoleTextArea, 104 ex.getMessage(), 105 msg("errorReTracing"), 106 JOptionPane.ERROR_MESSAGE); 107 } 108 catch (OutOfMemoryError er) 109 { 110 System.gc(); 112 113 System.out.println(msg("outOfMemory")); 115 116 MessageDialogRunnable.showMessageDialog(consoleTextArea, 118 msg("outOfMemory"), 119 msg("errorReTracing"), 120 JOptionPane.ERROR_MESSAGE); 121 } 122 123 printStream.flush(); 125 126 System.setIn(oldIn); 128 System.setOut(oldOut); 129 System.setErr(oldErr); 130 131 consoleTextArea.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); 132 consoleTextArea.setCaretPosition(0); 133 134 ProGuardGUI.systemOutRedirected = false; 136 } 137 138 139 141 145 private String msg(String messageKey) 146 { 147 return GUIResources.getMessage(messageKey); 148 } 149 } 150 | Popular Tags |