NotSerializableException для ToolkitImage при сериализации модели в Swing - PullRequest
0 голосов
/ 05 июля 2011

У меня есть приложение Swing, которое манипулирует фигурами. На моей панели инструментов есть функция масштабирования, которую пользователь активирует, нажимая кнопку, а затем курсор мыши меняется на лупу, которая является изображением. Моя проблема - на самом деле курсор, для некоторых случаев, когда я устанавливаю курсор на панель, отображающую фигуры, я не могу сохранить свою модель и получаю исключение java.io.NotSerializableException: sun.awt.image.ToolkitImage.

Моя модель

public class Document implements IDocObservable,Serializable{

...

public void updateCursor() {
    Iterator<IDocObserver> iter = docObservers.iterator();
    while (iter.hasNext()) {
        iter.next().docCursorChanged();
    }
}
... 

}

Акция

public class ZoomInAction extends AbstractAction {


public void actionPerformed(ActionEvent arg0) {
    ...
    Application.getInstance().getActiveDocument().updateCursor();
}

}

Панель дисплея (примечание: если я прокомментирую строку setCursor(..), я смогу сохранить)

public class Window extends JPanel implements IDocObserver{
...

public void paint(Graphics g){          
    //drawing the differents shapes
}

@Override

public void docCursorChanged() {        
    setCursor(Utile.getZoomInCursor();
    }
}

}

Класс, предоставляющий курсор

public class Utile {

private static Image zoomIn = toolkit.getImage(Utile.class.getResource("/images/zoomin_mouse.png"));
...

public static Cursor getZoomInCursor() {        
    return  toolkit.createCustomCursor(zoomIn, hotSpot, ""); 
}

}

Запись объекта представляет собой стандартный метод Java с outStream.writeObject(doc);

спасибо

1 Ответ

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

Вы не просто сериализуете модель, вы сериализуете список IDocObservers, который включает в себя окно, расширяет JPanel реализует IDocObserver.Я хочу, чтобы вы сериализовали JPanel.Не делайте этого: смотрите предупреждение в верхней части Javadoc.Вам не нужно сохранять наблюдателей вместе с наблюдаемыми, конечно: вы не можете сделать этот список временным?

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