Проблема понимания Сериализуемый - PullRequest
0 голосов
/ 24 июля 2011

только что начал использовать Serializable-штуку, я хочу сохранить пару списков и некоторые другие объекты, но я не могу понять, что-то правильно.

У меня есть несколько JList со своим собственным «DefaultListModel», который я использую для сортировки вещей в списке, я вызываю класс SortModel, когда я запускаю программу, я делаю это:

SortModel sortModel = new SortModel();
JList jList = new JList(sortModel);

Затем, когда программа запускается, объекты добавляются и сортируются в соответствии с указанными потребностями, а теперь, когда я сохраняю списки и загружаю их снова, они пусты.

Я также сохраняю объект класса, который содержит фон для программы (пользователь сам выбирает один), после сохранения мне нужно снова добавить его в программу (объект, в котором хранится фон), мне нужно чтобы добавить его в программу снова, не только загрузить его «как есть», плюс у меня есть некоторые объекты, которые я добавил к этому объекту со своими собственными слушателями. После того, как мне каким-то образом удалось загрузить его, объекты есть, но я не могу их использовать, поэтому я полагаю, что слушатели не сохраняются?

*, объясняющий редактирование Класс, который является программой, расширяет JFrame, в этом нет ничего смешного. «Фоновый объект» (назовите его map) расширяет JComponent, я добавляю это (пока назовем это программой) ... и программа выскакивает с изображением, которое она содержит. Затем на эту карту я добавляю объекты, которые также расширяют JComponent (назовите их точками), точки назначаются их собственным слушателям, прежде чем они будут добавлены, слушатели могут не быть «настоящими» слушателями, но они действуют так же, они "MouseAdapter" это что-то меняет? / объяснение редактирования *

* редактирование кода * код для сохранения:

FileOutputStream fOut = new FileOutputStream("testFile.mpd");
ObjectOutputStream outSt = new ObjectOutputStream(fOut);
outSt.writeObject(savedMap);

"testFile.mpd" - это то, на что это похоже, я уверен, что .mpd не должен иметь значения, вы можете создавать свои собственные форматы, верно? :) (основной класс называется Mappedoodle, .mpd звучит разумно, нет?) «saveMap» является объектом указанного Mappedoodle и содержит все списки и другую информацию, необходимую для сохранения.

код для загрузки:

FileInputStream fIn = new FileInputStream("testFile.mpd");
ObjectInputStream inSt = new ObjectInputStream(fIn);    
Mappedoodle openedMap = (Mappedoodle)inSt.readObject();

Информация в openMap используется (ну ... так и должно быть ...) для перезаписи определенных вещей в программе. * / редактирование кода *

Добавить все обратно в этот объект, даже добавить все обратно в списки не будет так сложно, так как это всего лишь несколько списков и несколько циклов, но я чувствую, что я просто не получаю Serializable ^^ так, кто-то хочет попытаться объяснить, почему не все спасается? И если это так, почему я не могу получить к нему доступ? Но если я могу, как? :)

Я не знаю, какой еще код должен быть релевантным, скажите, пожалуйста, какая дополнительная информация вам понадобится, чтобы помочь мне решить эту проблему, вставка всей программы будет очень грязной, поскольку в ней 11 классов и довольно много строк. *

Спасибо, <3 </p>

Ответы [ 2 ]

1 голос
/ 24 июля 2011

Код, который вы должны показать нам, должен быть достаточным, чтобы продемонстрировать вашу ошибку, и я, к сожалению, должен заявить, что ваш нет.Например, если я использую ваш код в очень простом примере (то, что я рекомендую вам сделать), вы увидите, что он работает.Мой код теста:

Mappedoodle.java

import java.io.Serializable;

public class Mappedoodle implements Serializable {
   private static final long serialVersionUID = -1760231235147491826L;
   private String text;
   private int value;

   public Mappedoodle(String text, int value) {
      this.text = text;
      this.value = value;
   }

   public String getText() {
      return text;
   }

   public int getValue() {
      return value;
   }

   @Override
   public String toString() {
      return text + ", " + value;
   }

}

MappedoodleSerialize.java

import java.io.*;

public class MappedoodleSerialize {
   public static void main(String[] args) {
      Mappedoodle savedMap = new Mappedoodle("Fubar", 200);
      FileOutputStream fOut;
      try {
         // your code below
         fOut = new FileOutputStream("testFile.mpd");
         ObjectOutputStream outSt = new ObjectOutputStream(fOut);
         outSt.writeObject(savedMap);
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

MappedoodleDeSerialize.java

import java.io.*;

public class MappedoodleDeSerialize {
   public static void main(String[] args) {
      try {
         // your code below
         FileInputStream fIn = new FileInputStream("testFile.mpd");
         ObjectInputStream inSt = new ObjectInputStream(fIn);
         Mappedoodle openedMap = (Mappedoodle) inSt.readObject();
         System.out.println(openedMap);
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      } catch (ClassNotFoundException e) {
         e.printStackTrace();
      } finally {
      }
   }
}

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

0 голосов
/ 17 августа 2016

Эта проблема была решена 5 лет назад, но решение потеряно из-за плохой памяти.

...