Skip to content

Commit b0ea321

Browse files
committed
GUI进度bug修复
1 parent 5c3761e commit b0ea321

File tree

6 files changed

+75
-23
lines changed

6 files changed

+75
-23
lines changed

config/config.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ keyAlias=test
1212
keyPassword=qqqqqq
1313

1414
# apk path
15-
apkFile=config/tnews.apk
16-
outFile=tnews-out.apk
15+
apkFile=/Users/xxx/Downloads/tianmao.apk
16+
outFile=/Users/xxx/Downloads/tianmao-out.apk

src/ApkCrack.java

+2
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ private void addNetConfig(String outFile) throws Exception {
197197
StreamResult consoleResult = new StreamResult(tmp);
198198
transformer.transform(domSource, consoleResult);
199199
File out = new File(outFile);
200+
File parent = out.getParentFile();
201+
if (!parent.exists()) parent.mkdirs();
200202
if (out.exists()) out.delete();
201203
tmp.renameTo(out);
202204
}

src/ApkProcessDialog.java

+19-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import javax.swing.*;
2+
import javax.swing.text.*;
23
import java.awt.*;
34
import java.awt.event.WindowAdapter;
45
import java.awt.event.WindowEvent;
@@ -11,6 +12,7 @@ public class ApkProcessDialog extends JDialog {
1112
private JTextArea detailLabel;
1213
private JProgressBar progressBar;
1314
private JScrollPane scrollPane;
15+
private Document document;
1416

1517
public void setApkFile(String apkFile) {
1618
this.apkFile = apkFile;
@@ -34,6 +36,8 @@ public ApkProcessDialog(Frame owner) {
3436
detailLabel = new JTextArea("");
3537
detailLabel.setLineWrap(true);
3638
detailLabel.setWrapStyleWord(true);
39+
document = new DefaultStyledDocument();
40+
detailLabel.setDocument(document);
3741
scrollPane.setViewportView(detailLabel);
3842
panel.add(top, BorderLayout.NORTH);
3943
panel.add(scrollPane, BorderLayout.CENTER);
@@ -67,21 +71,34 @@ public void start() {
6771
apkCrack.setDebuggable(true);
6872
setVisible(true);
6973
processThread = new Thread(() -> {
74+
ProgressUtil.init();
7075
apkCrack.start();
7176
});
77+
try {
78+
Thread.sleep(100);
79+
} catch (InterruptedException e) {
80+
e.printStackTrace();
81+
}
7282
processThread.start();
7383
}
7484

85+
private StringBuilder sb = new StringBuilder();
86+
7587
private void setProgressHandler() {
7688
ProgressUtil.setMsgHandler(new ProgressUtil.ProgressHandler() {
7789
@Override
7890
public void progress(String msg1, String msg2, float progress) {
91+
7992
SwingUtilities.invokeLater(new Runnable() {
8093
@Override
8194
public void run() {
8295
if (msg1 != null) {
83-
String oldText = detailLabel.getText();
84-
detailLabel.setText(oldText + "\n" + msg1);
96+
SimpleAttributeSet attrs = new SimpleAttributeSet();
97+
try {
98+
document.insertString(document.getLength(), msg1 + "\n", attrs);
99+
} catch (BadLocationException e) {
100+
e.printStackTrace();
101+
}
85102
}
86103
if (msg2 != null) {
87104
mainLabel.setText(msg2);

src/META-INF/MANIFEST.MF

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
Manifest-Version: 1.0
2-
Main-Class: Main
2+
Main-Class: MainUI
33

src/Main.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
public class Main {
22

33
public static void main(String[] args) {
4-
new ApkCrack().start();
4+
ProgressUtil.init();
5+
new ApkCrack().start();
56
}
67
}

src/ProgressUtil.java

+49-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import brut.androlib.Androlib;
22
import brut.androlib.res.AndrolibResources;
33

4+
import java.util.concurrent.Executor;
5+
import java.util.concurrent.Executors;
46
import java.util.logging.Handler;
57
import java.util.logging.LogRecord;
68
import java.util.logging.Logger;
@@ -51,29 +53,45 @@ public interface ProgressHandler {
5153
void progress(String msg1, String msg2, float progress);
5254
}
5355

54-
public static void setMsgHandler(ProgressHandler progressHandler) {
56+
private static ProgressHandler progressHandler;
57+
58+
private static ProgressHandler getHandler() {
59+
return progressHandler;
60+
}
61+
62+
private static Executor executor = Executors.newSingleThreadExecutor();
63+
64+
65+
public static void init() {
5566
for (Class cls : LoggerClasses) {
5667
Logger logger = Logger.getLogger(cls.getName());
5768
logger.addHandler(new Handler() {
5869
@Override
5970
public void publish(LogRecord record) {
60-
String msg = record.getMessage();
61-
String msg2 = null;
62-
float progress = 0f;
63-
64-
for (int i = 0; i < detailMsgs.length; i++) {
65-
if (msg.startsWith(detailMsgs[i])) {
66-
progress = (i + 1f) / detailMsgs.length;
67-
break;
68-
}
69-
}
70-
for (String m : msgs) {
71-
if (msg.startsWith(m)) {
72-
msg2 = msg;
73-
break;
71+
System.out.println(record.getMessage());
72+
executor.execute(new Runnable() {
73+
@Override
74+
public void run() {
75+
if (getHandler() == null) return;
76+
String msg = record.getMessage();
77+
String msg2 = null;
78+
float progress = 0f;
79+
80+
for (int i = 0; i < detailMsgs.length; i++) {
81+
if (msg.startsWith(detailMsgs[i])) {
82+
progress = (i + 1f) / detailMsgs.length;
83+
break;
84+
}
85+
}
86+
for (String m : msgs) {
87+
if (msg.startsWith(m)) {
88+
msg2 = msg;
89+
break;
90+
}
91+
}
92+
getHandler().progress(msg, msg2, progress);
7493
}
75-
}
76-
progressHandler.progress(msg, msg2, progress);
94+
});
7795
}
7896

7997
@Override
@@ -88,4 +106,18 @@ public void close() throws SecurityException {
88106
});
89107
}
90108
}
109+
110+
public static void setMsgHandler(ProgressHandler h) {
111+
progressHandler = h;
112+
}
113+
114+
public static void main(String[] args) {
115+
setMsgHandler(new ProgressHandler() {
116+
@Override
117+
public void progress(String msg1, String msg2, float progress) {
118+
System.out.println(msg1 + "," + msg2 + "," + progress);
119+
}
120+
});
121+
Logger.getLogger(Androlib.class.getName()).info("test");
122+
}
91123
}

0 commit comments

Comments
 (0)