daniLOLZ / ingsw2022-AM45

Progetto ingegneria del software 2022 Gruppo AM45
5 stars 0 forks source link

reading files from resources: pls try ASAP on real JAR #12

Open ingconti opened 2 years ago

ingconti commented 2 years ago

Ho visto che leggete dei file Jason da disco: a parte gli errori che ho segnalato, è importante che al più presto proviate a generare un jar vero e l'ho lanciato da consolle col comando java -jar.

Poi sospetto che avrete qualche altro problema di lettura, se non fallita generazione del JAR o di esecuzione

ghost commented 2 years ago

Effettivamente abbiamo problemi di lettura con i file, ho cercato su internet e trovato che veniva consigliato l'utilizzo di getResourceAsStream() in quanto funzionerebbe in ogni caso, ma invece non funziona quando viene creato il .jar

ghost commented 2 years ago

Al momento nel codice viene usata la lettura di json per i parametri di rete, il codice è il seguente:

        private static final String filename = "/NetworkParameters.json"; 
        [...]
        Reader reader;
        Integer returnPort;
        InputStream stream;

        try {
            stream = Preferences.class.getResourceAsStream(filename);
            reader = new InputStreamReader(stream);
        } catch (NullPointerException e) {
            System.err.println("Preferences file hasn't been found, using standard port");
            e.printStackTrace();
            return standardPort;
        } 

Quale potrebbe essere la causa del mancato funzionamento all'interno di un jar?

ghost commented 2 years ago

Siamo riusciti a leggere file dalle risorse, abbiamo scoperto che il problema originario era dovuto ad un'import mancante nel file POM Qui una classe che utilizza correttamente la lettura di file json (file Preferences.java)

public static int readPortFromJson(){

        Type mapType = new TypeToken<Map<String, Object>>() {}.getType();    //Map<NetworkFieldEnum, Object> is a generic Type. It needs to be specified
        Map<String, Object> map;
        Reader reader;
        Integer returnPort;
        InputStream stream;

        try {
            stream = Preferences.class.getResourceAsStream(filename);
            reader = new InputStreamReader(stream);
        } catch (NullPointerException e) {
            System.err.println("Preferences file hasn't been found, using standard port");
            e.printStackTrace();
            return standardPort;
        }

        map = gson.fromJson(reader, mapType);

        return ApplicationHelper.getIntFromBrokerField(map.get("defaultPort"));
    }