JTable не отображает символы UTF-8 при запуске из JAR - PullRequest
0 голосов
/ 11 апреля 2020

Когда я запускаю созданный JAR-файл, JTable не отображает UTF-8. Когда я запускаю его в IntelliJ IDEA, он отображается правильно.

У меня есть пара идей, но я не могу найти способ отладки. Во-первых, данные таблицы сериализуются, может, есть что-то, чего я не знаю, и мне нужно где-то указать, что это UTF-8?

Во-вторых, может быть, мне нужно где-то указать кодирование, где я создаю и заполняю JTable как элемент GUI? Я добавляю фрагменты кода для обоих

Код, который я использую для сохранения и извлечения данных, находится здесь:

 private void deserialiseStatsData(){
    try {
        FileInputStream fis = new FileInputStream("tabledata.ser");
        ObjectInputStream ois = new ObjectInputStream(fis);
        tableData = (TableData) ois.readObject();
        fis.close();
        ois.close();
    } catch (Exception e) {
        tableData = new TableData();
    }
}
private void serialiseStatsData(){
    try {
        FileOutputStream fos = new FileOutputStream("tabledata.ser");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(tableData);
        oos.close();
        fos.close();
    }
    catch (Exception e) {e.printStackTrace();}
}

Код для создания и заполнения таблицы:


 private void createUIComponents() {
        String headers[] = {"Exercise", "Did Succeed?", "Times Failed Before 1st Success",
                "Accuracy (%), ", "Checked Result Before Succeeding"};
        TableData dataTable = null;
        try {
            FileInputStream fis = new FileInputStream("tabledata.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            dataTable = (TableData) ois.readObject();
            fis.close();
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Object[][] data;


        int rows = dataTable.getRows();
        int cols = headers.length;
        data = new Object[rows][cols];
        for (int j = 0; j < rows; j++) {
            data[j][0] = dataTable.getLine(j).getExercise();
            data[j][1] = dataTable.getLine(j).isSuccess();
            data[j][2] = dataTable.getLine(j).getNoOfFails();
            data[j][3] = dataTable.getLine(j).getPercentage();
            data[j][4] = dataTable.getLine(j).isAnswerCheckBeforeSuccess();
        }

        table = new JTable(data, headers);
    }

Что я пробовал:

  1. Добавлены строки в параметры виртуальной машины:

    -Dconsole.encoding = UTF-8

    -Dfile.encoding = UTF-8

  2. Изменена кодировка в настройках -> Кодировки файлов на UTF-8

На данный момент я не знаю, что еще Я мог бы сделать.

Отредактировано: я получаю такие вещи в JTable:

enter image description here

Когда я должен получить такие вещи:

enter image description here

Список символов, который не отображается:

  • union = '\ u222A';
  • пересечение = '\ u2229';
  • product = '\ u2A2F';
  • разница = '\ u2216';
  • infinity = '\ u221E';
  • ownTo = '\ u2208';
  • weakSubset = '\ u2286';
  • ProperSubset = '\ u2282';
...