IllegalArgumentException при использовании GSON из fromJson () - PullRequest
0 голосов
/ 23 мая 2018

У меня есть это исключение при попытке проанализировать файл JSON с GSON:

Exception in thread "JavaFX Application Thread"   java.lang.IllegalArgumentException: class com.sun.javafx.jmx.HighlightRegion declares multiple JSON fields named hash

Я немного проверил причины этого и обнаружил, что это происходит только при создании объекта, который имеетОбъект Event как член.В этом случае я пытаюсь создать List объектов Quest, которые в конечном итоге имеют объекты Event.

package Quests;

import Events.EventSequence;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Quest {

    public static void parseQuest() {

        Gson gson = new Gson();
        FileReader questGSON;
        try {
            questGSON = new FileReader(QUEST_FILE);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return;
        }
        JsonObject questJSON = gson.fromJson(questGSON, JsonObject.class);

        questList = new ArrayList<>();

        for(Map.Entry<String, JsonElement> element : questJSON.entrySet()) {
            questList.add(gson.fromJson(element.getValue(), Quest.class));
        }
    }

}

Я использую javafx в этом классе следующим образом:

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;

public abstract class Event implements EventHandler<ActionEvent> {

    // members of this class
    private String title, text;
    private Button[] buttonSet;
    protected Entity other;
    protected Event nextEvent;

    public abstract Event chooseNewEvent(String command);

    @Override
    public void handle(ActionEvent event) {
        // Get the name of the button
        String command = ((Button) event.getSource()).getText();

        displayNewEvent(chooseNewEvent(command));
    }
}

Единственная информация, которую я смог найти по этому поводу, была: https://github.com/wpilibsuite/shuffleboard/issues/358

Может ли кто-нибудь указать мне направление, чтобы исправить мою ошибку?

1 Ответ

0 голосов
/ 24 мая 2018

Я обнаружил, что это был массив Button из javafx.scene.control.Button в моем классе Event, который вызывал проблему.Я исправил это, сделав его transient, чтобы GSON игнорировал его и не вызывал никаких проблем.

Тем не менее, я понятия не имею, почему массив Button вызовет это исключение.Есть мысли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...