私は Java を使って数か月になりますが、まだまったくの初心者なので、助けていただければ幸いです。私はしばらくの間 (別のゲームに基づいて) ゲームに取り組んでおり、レベル エディターを作成したいと考えていました。情報を .ser ファイルに保存するのに問題がありますが、他のクラスの他の場所では問題なく保存できます。エラーは ですjava.io.NotSerializableException: resources.Sample$Ball
が、それが私に与えている行番号はそのクラスとは何の関係もありません。Sampleというクラスがあり、その中にBallというprivateクラスがあるのでそこまではわかるのですが、それが情報を与えてくれるというのは意味がありません。このSample
クラスは 1 つのクラスで 1 回しか使用されず、エラーが発生したクラスではありません。このクラスまたはBall
サブクラスで問題が発生したことはありません。
エラーが私に与える2つの行番号は次のとおりです。
at LevelEditor.saveDialog(LevelEditor.java:309)
at LevelEditor.actionPerformed(LevelEditor.java:256)
これらの行番号のコード行は次のとおりです。
oos.writeObject(new CustomSave(platforms, stars, ball, levelSize));
これは実際に問題が発生している場所であり、他の行番号は、上記のコードが含まれている関数を呼び出している場所です。クラスが受け取る変数は、クラスまたはクラスCustomSave
とは関係ありません。また、クラスが非常に小さいため、ここでも提供します。上記の行番号にもコンテキストを提供します。Sample
Ball
CustomSave
コンテキストからコードへ
try {
File f = new File(filename);
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new CustomSave(platforms, stars, ball, levelSize));
oos.close();
} catch (Exception e1) {
e1.printStackTrace();
}
CustomSave クラス
package resources;
import java.awt.Dimension;
import java.io.*;
import java.util.ArrayList;
import resources.BouncyBall;
public class CustomSave implements Serializable {
private ArrayList<DragablePlatform> platforms;
private ArrayList<StarPolygon> stars;
private StaticBall ball;
private Dimension levelSize;
public CustomSave(ArrayList<DragablePlatform> platforms, ArrayList<StarPolygon> stars, StaticBall ball, Dimension levelSize){
this.platforms = platforms; this.stars = stars; this.ball = ball; this.levelSize = levelSize;
}
public ArrayList<DragablePlatform> getPlatforms() {
return platforms;
}
public ArrayList<StarPolygon> getStars() {
return stars;
}
public BouncyBall getBall() {
return ball;
}
public Dimension getLevelSize() {
return levelSize;
}
}
繰り返しますが、意味がないため、なぜこのエラーが発生するのかわかりません。トラブルシューティングを試みるためSerializable
に、Ball
クラス内のSample
クラスに実装してみましたが、問題はある程度修正されました。エラーSample$Ball
は問題としてリストされなくなりましたが、代わりに別のランダムなクラスが問題としてリストされました。別のクラスは、私がやろうとしていることとまったく関係がありません。
フルエラー
java.io.NotSerializableException: resources.Sample$Ball
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeArray(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.access$300(Unknown Source)
at java.io.ObjectOutputStream$PutFieldImpl.writeFields(Unknown Source)
at java.io.ObjectOutputStream.writeFields(Unknown Source)
at java.awt.Container.writeObject(Unknown Source)
at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at LevelEditor.saveDialog(LevelEditor.java:454)
at LevelEditor.actionPerformed(LevelEditor.java:298)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
レベル エディタ 454 行目
oos.writeObject(new CustomSave(platforms, stars, ball, levelSize));
レベル エディタ 298 行目
saveDialog();
(上記の行を含む関数)
すべてのヘルプは大歓迎です。他に何か必要な場合はお問い合わせください。
ありがとうございました。