• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jiangxincode / ApkToolBoxGUI / #1207

13 Sep 2025 11:58PM UTC coverage: 2.895% (-0.006%) from 2.901%
#1207

push

jiangxincode
fix #569: 可能在完全初始化子类之前逃逸了 'this'

0 of 32 new or added lines in 22 files covered. (0.0%)

9 existing lines in 8 files now uncovered.

248 of 8567 relevant lines covered (2.89%)

0.03 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/edu/jiangxin/apktoolbox/file/zhconvert/ZhConvertPanel.java
1
package edu.jiangxin.apktoolbox.file.zhconvert;
2

3
import com.github.houbb.opencc4j.util.ZhConverterUtil;
4
import edu.jiangxin.apktoolbox.swing.extend.FileListPanel;
5
import edu.jiangxin.apktoolbox.swing.extend.EasyPanel;
6
import edu.jiangxin.apktoolbox.utils.Constants;
7
import edu.jiangxin.apktoolbox.utils.FileUtils;
8
import org.apache.commons.lang3.StringUtils;
9

10
import javax.swing.*;
11
import java.awt.*;
12
import java.awt.event.ActionEvent;
13
import java.awt.event.ActionListener;
14
import java.io.File;
15
import java.io.IOException;
16
import java.io.Serial;
17
import java.util.List;
18
import java.util.*;
19

20
public class ZhConvertPanel extends EasyPanel {
21
    @Serial
22
    private static final long serialVersionUID = 1L;
23

24
    private JPanel northPanel;
25

26
    private JSplitPane centerPanel;
27

28
    private FileListPanel fileListPanel;
29

30
    private JTextField suffixTextField;
31

32
    private JCheckBox recursiveCheckBox;
33

34
    private JComboBox comboBox;
35

36
    private JTextField keyText;
37

38
    private JTextField valueText;
39

40
    private JTextArea textArea;
41

42
    private JList transformList;
43

44
    private static ZHConverterUtils myZHConverterUtils = new ZHConverterUtils();
×
45

46
    public ZhConvertPanel() throws HeadlessException {
47
        super();
×
48
    }
×
49

50
    @Override
51
    public void initUI() {
52
        // JSplitPanel只能用BorderLayout,JFrame默认是BorderLayout,JPanel默认是BoxLayout
53
        BorderLayout boxLayout = new BorderLayout();
×
54
        setLayout(boxLayout);
×
55

56
        createNorthPanel();
×
57
        add(northPanel, BorderLayout.NORTH);
×
58

59
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
60

61
        createCenterPanel();
×
62
        add(centerPanel, BorderLayout.CENTER);
×
63
    }
×
64

65
    private void createNorthPanel() {
66
        northPanel = new JPanel();
×
67
        northPanel.setLayout(new BoxLayout(northPanel, BoxLayout.Y_AXIS));
×
68

69
        fileListPanel = new FileListPanel();
×
NEW
70
        fileListPanel.initialize();
×
71
        northPanel.add(fileListPanel);
×
72
        northPanel.add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
73

74
        JPanel optionPanel = new JPanel();
×
75
        optionPanel.setLayout(new BoxLayout(optionPanel, BoxLayout.X_AXIS));
×
76
        northPanel.add(optionPanel);
×
77

78
        JLabel suffixLabel = new JLabel("Suffix:");
×
79
        suffixTextField = new JTextField();
×
80
        suffixTextField.setToolTipText("an array of extensions, ex. {\"java\",\"xml\"}. If this parameter is empty, all files are returned.");
×
81
        suffixTextField.setText(conf.getString("osconvert.suffix"));
×
82
        optionPanel.add(suffixLabel);
×
83
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
84
        optionPanel.add(suffixTextField);
×
85
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
86

87
        recursiveCheckBox = new JCheckBox("Recursive");
×
88
        recursiveCheckBox.setSelected(true);
×
89
        optionPanel.add(recursiveCheckBox);
×
90
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
91

92
        comboBox = new JComboBox();
×
93
        comboBox.addItem(Constants.zhSimple2zhTw);
×
94
        comboBox.addItem(Constants.zhTw2zhSimple);
×
95
        optionPanel.add(comboBox);
×
96

97
        JButton convertBtn = new JButton("确认转换");
×
98
        convertBtn.addActionListener(new ConvertBtnActionListener());
×
99
        northPanel.add(convertBtn);
×
100

101
        JFileChooser fileChooser = new JFileChooser();
×
102
        fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
×
103
    }
×
104

105
    private void createCenterPanel() {
106
        JPanel centerLeftTopPanel = new JPanel();
×
107
        centerLeftTopPanel.setLayout(new BoxLayout(centerLeftTopPanel, BoxLayout.Y_AXIS));
×
108

109
        JPanel keyValuePanel = new JPanel();
×
110
        keyValuePanel.setLayout(new BoxLayout(keyValuePanel, BoxLayout.X_AXIS));
×
111
        centerLeftTopPanel.add(keyValuePanel);
×
112

113
        keyText = new JTextField(10);
×
114
        keyValuePanel.add(keyText);
×
115

116
        valueText = new JTextField(10);
×
117
        keyValuePanel.add(valueText);
×
118

119
        JButton saveBtn = new JButton("添加词组定义");
×
120
        saveBtn.addActionListener(new SaveBtnActionListener());
×
121
        centerLeftTopPanel.add(saveBtn);
×
122

123
        JScrollPane centerLeftBottomPanel = new JScrollPane();
×
124
        textArea = new JTextArea();
×
125
        textArea.setMargin(new Insets(10, 10, 10, 10));
×
126
        //自动换行
127
        textArea.setLineWrap(true);
×
128
        textArea.setEditable(false);
×
129
        centerLeftBottomPanel.add(textArea);
×
130

131
        //垂直滚动条自动出现
132
        centerLeftBottomPanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
×
133
        JSplitPane centerLeftSplitPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, centerLeftTopPanel, centerLeftBottomPanel);
×
134

135
        transformList = new JList();
×
136
        refreshListData();
×
137
        transformList.setFont(new Font("Dialog", 1, 18));
×
138
        transformList.setBorder(BorderFactory.createTitledBorder("词组转换定义"));
×
139
        JScrollPane centerRightScrollPanel = new JScrollPane(transformList);
×
140

141
        centerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, centerLeftSplitPanel, centerRightScrollPanel);
×
142
        centerPanel.setDividerLocation(0.7f);
×
143
    }
×
144

145
    private final class ConvertBtnActionListener implements ActionListener {
×
146
        @Override
147
        public void actionPerformed(ActionEvent e) {
148
            new Thread(() -> {
×
149
                String converType = comboBox.getSelectedItem().toString();
×
150
                System.out.println(converType);
×
151

152
                List<File> fileList = new ArrayList<>();
×
153
                for (File file : fileListPanel.getFileList()) {
×
154
                    String[] extensions = null;
×
155
                    if (StringUtils.isNotEmpty(suffixTextField.getText())) {
×
156
                        extensions = suffixTextField.getText().split(",");
×
157
                    }
158
                    fileList.addAll(FileUtils.listFiles(file, extensions, recursiveCheckBox.isSelected()));
×
159
                }
×
160
                Set<File> fileSet = new TreeSet<>(fileList);
×
161
                fileList.clear();
×
162
                fileList.addAll(fileSet);
×
163

164
                textArea.setCaretPosition(textArea.getText().length());
×
165
                try {
166
                    scanFolderAndConver(fileList, converType, textArea);
×
167
                    JOptionPane.showMessageDialog(getFrame().getFrames()[0], "转换成功" , "提示",JOptionPane.WARNING_MESSAGE);
×
168
                    textArea.append("done..." + "\n");
×
169
                    textArea.setCaretPosition(textArea.getText().length());
×
170
                } catch (IOException e1) {
×
171
                    JOptionPane.showMessageDialog(getFrame().getFrames()[0], "异常:" + e1.getMessage(), "异常",JOptionPane.ERROR_MESSAGE);
×
172
                    textArea.append("转换异常..." + "\n");
×
173
                    textArea.setCaretPosition(textArea.getText().length());
×
174
                }
×
175
            }).start();
×
176
        }
×
177
    }
178

179
    private final class SaveBtnActionListener implements ActionListener {
×
180
        @Override
181
        public void actionPerformed(ActionEvent e) {
182
            String key = keyText.getText();
×
183
            String value = valueText.getText();
×
184

185
            if (StringUtils.isNotBlank(key) && StringUtils.isNotBlank(value)){
×
186
                myZHConverterUtils.storeDataToProperties(key,value);
×
187
                JOptionPane.showMessageDialog(ZhConvertPanel.this, "成功插入一条词组对应信息", "提示",JOptionPane.WARNING_MESSAGE);
×
188
                refreshListData();
×
189
                textArea.append("成功插入一条词组对应信息:" + key + " <===> " + value + "\n");
×
190
            }else{
191
                JOptionPane.showMessageDialog(ZhConvertPanel.this, "键值对不能为空", "提示",JOptionPane.WARNING_MESSAGE);
×
192
            }
193
        }
×
194
    }
195

196
    private void refreshListData(){
197
        List<String> listModel = new ArrayList<>();
×
198
        Properties properties = myZHConverterUtils.getCharMap();
×
199
        for (String key2 : properties.stringPropertyNames()) {
×
200
            listModel.add(key2 + " <===> " + properties.getProperty(key2));
×
201
        }
×
202
        transformList.setListData(listModel.toArray());
×
203
    }
×
204

205
    private static void scanFolderAndConver(List<File> fileList, String converType, JTextArea jTextArea) throws IOException {
206
        jTextArea.append("文件转换开始:\n");
×
207
        for (File file : fileList){
×
208
            jTextArea.append("开始转换:"+file + "\n");
×
209
            String content = org.apache.commons.io.FileUtils.readFileToString(file, "utf-8");
×
210

211
            if (converType.equals(Constants.zhSimple2zhTw)){
×
212
                String str = myZHConverterUtils.myConvertToTW(content);
×
213
                String result = ZhConverterUtil.toTraditional(str);
×
214
                org.apache.commons.io.FileUtils.write(file,result,"UTF-8");
×
215
            }else{
×
216
                String str = myZHConverterUtils.myConvertToSimple(content);
×
217
                String result = ZhConverterUtil.toSimple(str);
×
218
                org.apache.commons.io.FileUtils.write(file,result,"UTF-8");
×
219
            }
220
            jTextArea.append("转换完成:"+file + "\n");
×
221
            jTextArea.setCaretPosition(jTextArea.getText().length());
×
222
        }
×
223
        jTextArea.append("文件转换结束:\n");
×
224
        jTextArea.append("==========================================================================:\n");
×
225
    }
×
226
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc