Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

自作クラスとNotSerializableExceptionについて。

JTabbedPaneやJTextPaneなどでタブ昨日付きエディターを作ろうとしています。
どのファイルを開いていたかなどを保存するために、まず自作クラスでタブごとにその情報やキャレットの位置などを保存することにしました。
そして、そのオブジェクトをVectorで記憶しておいて、エディターが閉じられたときにFileOutputStreamとObjectOutputStreamでファイルに保存するようにしています。
ですが、windowClosingでの保存のところでNotSerializableExceptionが出てしまいました。
そこで自作クラスにSerializableを追加してみると、エラーは出ないものの保存に失敗してるのか開くのに失敗してるのかエディターを開き直した時にエディターを閉じたときに開いていたタブが開かれていませんでした。
どうしたらよいのでしょうか?

以下自作クラスです。
package compiler_editor;

import java.io.File;

public class EditorData{
    boolean select=false;
    File file=null;
    int start=0,end=0;

    public EditorData(File f) {
        file=f;
    }
}

6

回答

94404

閲覧

6件の回答

評価

0

>エラーは出ないものの保存に失敗してるのか開くのに失
敗してるのか

保存に失敗しているのか開くのに失敗しているのか読み手
もあなた同様にわかりません。事実がないのでどちらかわ
からないのです。

プログラムが意図通り動かない場合は普通は原因を探るた
めに事実をつかむ必要があります。アプリケーションの動
作を外からみただけで「あ、多分ここだ」と勘でわかると
きも確かにありますが大抵はプログラムの内部の動きを追
いながらデバッグすることでどのように動作しているかの
事実を掴まないと原因はわかりません。デバッグしてみて
ください。

評価

0

昨日書き込んだつもりなのに書き込めてませんでした・・・;

結果だけ書くと、エディターを開くときに読み込んだVectorのEditDataの数だけタブを開いておくようにしているんですけど、そのタブを開くためのメソッドでそのVectorにEditDataを追加してしまっている行を発見しました。
そのため、開くたびにVectorのサイズが増えていって無限ループになってしまっていたのが原因でした。

きちんと見なおせば気がついたような問題ですいませんでした。
KSwordOfHasteさんありがとうございました。

評価

0

デバッグはされていたのですね。ちょっと回答が失礼な内容
でしたがご容赦ください。

評価

0

いや、まともなデバッグは言われるまでやっていませんでした。
このプログラムはもともとEditorDataではなくFileのみをVectorに記憶してファイルに保存したりしていたもので、今回その時と仕様変更してEditorDataを使うようにしたときにただ記憶・保存するオブジェクトが自作クラスに変わったのが原因?とか考えていたので、言われるまではっきりとどこが原因なのかを考えていませんでした。
なので、初めに書いたように言われるまでデバッグはやっていなかったということであってます。
まともにデバッグもせずにすいませんでした。

評価

0

シリアライズ可能なのはいいとして、どうシリアライズし
てどう保存してるのか、どう再構築してるのかが、全然見
えないなあ。

評価

0

って、ああ。もう解決してたのか。これは失礼。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。