Java 3d对象的Java序列化错误
我已经搜索了好几个帖子,但我的程序无法运行。 这就是问题所在---- 我有一个类,它显示一个colorcube和一个save按钮,save按钮用于将java3d对象(这里是colorcube)保存到一个对象文件中供以后使用 对象文件已创建,但除了2-3行之外,它似乎是空的。 请看一看--- 以及可序列化类------ 请看一看,让我知道我哪里做错了。 还有一件事,可以将transformgroup写入对象文件吗?Java 3d对象的Java序列化错误,java,serialization,java-3d,Java,Serialization,Java 3d,我已经搜索了好几个帖子,但我的程序无法运行。 这就是问题所在---- 我有一个类,它显示一个colorcube和一个save按钮,save按钮用于将java3d对象(这里是colorcube)保存到一个对象文件中供以后使用 对象文件已创建,但除了2-3行之外,它似乎是空的。 请看一看--- 以及可序列化类------ 请看一看,让我知道我哪里做错了。 还有一件事,可以将transformgroup写入对象文件吗? 谢谢。要序列化对象,其所有字段必须可序列化(此处为Colorcube),否则应声明
谢谢。要序列化对象,其所有字段必须可序列化(此处为
Colorcube
),否则应声明为transient
。
请确保
ColorCube
可序列化(即,它实现了serializable
接口)以使代码正常工作 序列化对象时,必须决定如何处理每个属性。这里有两个主要选项:
1) 序列化它:如果该属性的类实现serializable(或者它是一个基元类型),则可以,否则必须编写如何序列化它(实现serializable)的代码
2) 不序列化此属性,如果您不想序列化此属性,因为它是临时缓存或其他类型(它不表示此对象的状态),则可以将其标记为
瞬态
,并且此属性将不会序列化。在这种情况下,您不必担心如何序列化此属性,其类也不必实现serializable。首先,请学习如何正确格式化代码。这是不可读的。
public class Rotation extends Applet implements ActionListener {
//---- Attribute -----------------------
private SimpleUniverse universe;
private Canvas3D canvas3D;
private static Frame frame;
BranchGroup szene = new BranchGroup();
TransformGroup objDreh = new TransformGroup();
ColorCube cube = new ColorCube(0.4);
public Rotation()
{}
public void init() {
setLayout(new BorderLayout());
JPanel panel = new JPanel();
JButton btn = new JButton("Save");
btn.addActionListener(this);
panel.add(btn);
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
canvas3D = new Canvas3D(config);
add(canvas3D, BorderLayout.CENTER);
add(panel, BorderLayout.SOUTH);
szene = macheSzene();
szene.compile();
universe = new SimpleUniverse(canvas3D);
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(szene);
}
/**
* Erstellt den Szenegraphen
*
* @return BranchGroup
*/
public BranchGroup macheSzene() {
BranchGroup objWurzel = new BranchGroup();
// Transformation, 2 Rotationen:
Transform3D drehung = new Transform3D();
Transform3D drehung2 = new Transform3D();
drehung.rotX(Math.PI / 4.0d);
drehung2.rotY(Math.PI / 5.0d);
drehung.mul(drehung2);
objDreh = new TransformGroup(drehung);
TransformGroup spin = new TransformGroup();
spin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
spin.addChild(cube);
objDreh.addChild(spin);
objWurzel.addChild(objDreh);
// Drehung
Alpha spinAlpha = new Alpha(-1, 5000);
RotationInterpolator dreher = new RotationInterpolator(spinAlpha, spin);
BoundingSphere zone = new BoundingSphere();
dreher.setSchedulingBounds(zone);
spin.addChild(dreher);
return objWurzel;
}
/**
* gibt speicher frei
*/
public void destroy() {
universe.removeAllLocales();
}
@Override
public void actionPerformed(ActionEvent e)
{
try {
writeIntoFile();
} catch (FileNotFoundException ex) {
Logger.getLogger(Rotation.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void writeIntoFile() throws FileNotFoundException
{
//throw new UnsupportedOperationException("Not supported yet.");
SerializeObject obj = new SerializeObject(cube);
try {
FileOutputStream out = new FileOutputStream("e://j3dObjects.xml");
try {
ObjectOutputStream sout = new ObjectOutputStream(out);
sout.writeObject(obj);
sout.close();
} catch (Exception err)
{ err.printStackTrace(); }
} catch(Exception err)
{ err.printStackTrace(); }
}
public static void main(String[] args) {
frame = new MainFrame(new Rotation(), 500, 500);
frame.setTitle("Rotation");
}
}
public class SerializeObject extends ColorCube implements Serializable {
ColorCube cb;
SerializeObject(ColorCube brn)
{
this.cb = brn;
}
}