Могу ли я реализовать Serializable, который существует и скомпилированный класс в java (geotools)? - PullRequest
1 голос
/ 22 апреля 2020

Я написал программу для чтения и отображения файлов форм ГИС от GeoTools и хочу сохранить состояние моей программы.

Основной класс. java

        Project myproject=new Project();
        myproject.mapLayers=this.frame.getMapContext().getLayers();

Project. java

import org.geotools.map.MapLayer;    
public class Project implements Serializable{
    public String name;
    public  MapLayer[] mapLayers;

    public void save(String projectname){
        ReadWriteObject.writeObject(projectname+".gpr",this);
    }

    public Project load(String projectname){
        return (Project)ReadWriteObject.readObject(projectname);
    }
}

ReadWriteObject

public class ReadWriteObject {

    public static boolean writeObject(String filename, Object obj){
        try {
            FileOutputStream f = new FileOutputStream(new File(filename));
            ObjectOutputStream o = new ObjectOutputStream(f);

            // Write objects to file
            o.writeObject(obj);
            o.close();
            f.close();
        } catch (FileNotFoundException e) {
            System.out.println("File not found");
            return false;
        } catch (IOException e) {
            System.out.println("Error initializing stream");
            return false;

        }

        return true;
    }
}

Произошла ошибка DefaultMapLayer не Serializable. Как сохранить состояние моих программ в java?

1 Ответ

0 голосов
/ 23 апреля 2020

Я просто выписал бы в каком-то формате (XML, JSON) слои, стили, которые вошли в вашу карту, а затем снова прочитал их, чтобы воссоздать карту. На самом деле вам не нужно хранить полное состояние программы.

В качестве альтернативы, вы можете предложить изменение в исходный код для добавления Serialize в учебный класс. В идеале вы должны найти все необходимые классы, которые будут нуждаться в сериализации, которые в настоящее время не реализуют Serialize, и отправить один запрос на извлечение.

...