2011-07-04 2 views
0

シェイプを操作するSwingアプリケーションがあります。私のツールバーには、ユーザーがボタンをクリックしてアクティブにするズーム機能があり、マウスのカーソルが画像である拡大鏡に変わります。 私の問題は実際にカーソルです。一部のレイズンでは、シェイプを表示しているパネルにカーソルを合わせると、モデルを保存できなくなり、java.io.NotSerializableException: sun.awt.image.ToolkitImage例外が発生します。SwingでモデルをシリアライズするときのToolkitImageのNotSerializableException

マイモデル

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(); 
} 

}

ディスプレイパネル(注:私はへI'amができ、setCursor(..)行をコメント場合保存)

public class Window extends JPanel implements IDocObserver{ 
... 

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

@Override 

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

}

オブジェクトの書き込みがあなたがoutStream.writeObject(doc);

おかげ

答えて

1

と標準のJava Methodeのあるカーソル

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, ""); 
} 

}

を提供クラスモデルをシリアライズするだけではなく、 Windowを含むIDocObserversのリストをシリアライズするJPanelはIDocObserverを実装しています。あなたはJPanelをシリアライズしています。しないでください:Javadocの上部にある警告を見てください。オブザーバーをオブザーバブルと一緒に保存する必要はありません。確かに、そのリストを一時的にすることはできませんか?

+0

それは働いたオブザーバーリストを一時的なものにするとき、私はアプリケーションへの影響を評価して見るつもりです。 – outellou

関連する問題