如何从文件加载游戏数据? [英] How to load game data from file?

查看:99
本文介绍了如何从文件加载游戏数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用Serializable将游戏数据保存到文件中,现在我想将保存的数据从文件加载到新的JFrame中。实际上我想要做的是如果玩家点击继续按钮,游戏将从停止的状态开始,并在我们再次播放时保存。希望你能帮我解决这个问题。先感谢您。



这是我得到的错误:

线程AWT-EventQueue-0中的异常java.lang .NullPointerException 
at java.awt.Container.updateGraphicsData(Container.java:1158)
at java.awt.Container.updateGraphicsData(Container.java:1160)
at java.awt.Container .updateGraphicsData(Container.java:1160)
at java.awt.Container.updateGraphicsData(Container.java:1160)
at java.awt.Container.updateGraphicsData(Container.java:1160)
在java.awt.Component.setGraphicsConfiguration(Component.java:1153)
at java.awt.Window.setGraphicsConfiguration(Window.java:3177)
at java.awt.Window.initGC(Window。 java:478)
at java.awt.Window.initDeserializedWindow(Window.java:2987)
at java.awt.Window.readObject(Window.java:3075)
at sun.reflect .NativeMethodAccessorImpl.invoke0(原生方法)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java) :2067)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at javax.swing。 event.EventListenerList.readObject(EventListenerList.java:274)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
a t java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream) .java:2176)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
at java。 io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2285)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:561)
at javax.swing.JComponent.readObject(JComponent.java:5467)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl。 java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java: 2067)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1973)
at java.io.ObjectInputStream .readObject0(ObjectInputStream.java:1565)
at java.io.ObjectInputStream.access $ 800(ObjectInputStream.java:214)
at java.io.ObjectInputStream $ GetFieldImpl.readFields(ObjectInputStream.java:2450)
at java.io.ObjectInputStream.readFields(ObjectInputStream.java:601)
at java.awt.Container.readObject(Container.java:3720)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (原生方法)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass) .java:1158)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
at java。 io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1973)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1565)
at java.io.ObjectInputStream.access $ 800(ObjectInputStream.java:214)
at java.io.ObjectInputStream $ GetFieldImpl.readFields(ObjectInputStream.java:2450)
at java.io. ObjectInputStream.readFields(ObjectInputStream.java:601)
at java.awt.Container.readObject(Container.java:3720)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
at java.io.ObjectInputStream .readSerialData(ObjectInputStream.java:2176)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at GameLogic $ Main.actionPerformed(GameLogic.java:278)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java: 2022)
at javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2 348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf .basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) )
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2238)
at java.awt.Component。 dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2296)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4897)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
at java.awt.Li ghtweightDispatcher.dispatchEvent(Container.java:4475)
at java.awt.Container.dispatchEventImpl(Container.java:2282)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access $ 500( EventQueue.java:97)
at java.awt.EventQueue $ 3.run(EventQueue.java:709)
at java.awt.EventQueue $ 3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain。 java:90)
at java.awt.EventQueue $ 4.run(EventQueue.java:733)
at java.awt.EventQueue $ 4.run(EventQueue.java:731)
at java .SEC urity.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy( EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java .awt.EventDispatchThread.run(EventDispatchThread.java:82)





我的尝试:



类GameLogic扩展... {
/ * ...


。* /

静态董事会;
/ * ...


。* /

else if(btnTxt.equals(Save)){

try {
FileOutputStream file = new FileOutputStream(chess 。文本);
ObjectOutputStream object = new ObjectOutputStream(file);
object.writeObject(board);
object.close();
//创建一个对话框
JFrame f = new JFrame();
JDialog d =新的JDialog(f,国际象棋游戏);

//创建一个标签
JLabel l = new JLabel(游戏成功保存!);

d.add(l);

//对话框的设置
d.setSize(200,100);
d.setLocationRelativeTo(null);

//设置对话框的可见性
d.setVisible(true);

}
catch(Exception ex)
{
ex.printStackTrace();
}


} //关闭保存
否则if(btnTxt.equals(Continue))
{
JFrame fr1 =新的JFrame();
try {
FileInputStream fileInputStream = new FileInputStream(chess.txt);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
ObjectInputStream objectInputStream = new ObjectInputStream(bufferedInputStream);
Board object =(Board)objectInputStream.readObject();
objectInputStream.close();
} catch(IOException fe)
{
fe.printStackTrace();
} catch(ClassNotFoundException ce)
{
ce.printStackTrace();
}
} //关闭继续

解决方案

800(ObjectInputStream.java:214)
at java.io.ObjectInputStream


GetFieldImpl.readFields(ObjectInputStream.java:2450)
at java.io.ObjectInputStream.readFields(ObjectInputStream.java:601)
at java.awt.Container.readObject(Container.java:3720)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass .invokeReadObject(ObjectStreamClass.java:1158)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1973)
at java.io.ObjectInputStream.readObject0( ObjectInputStream.java:1565)
at java.io.ObjectInputStream.access


800(ObjectInputStream.java:214)
at java.io.ObjectInputStream

I have tried to save the game data into the file using Serializable and now I want to load the saved data from the file into a new JFrame. Actually what I'm trying to do is if the player clicks on continue button, the game will start from the state where it was left off and have been saved when we play it again. Hope you can help me resolve this problem. Thank you in advance.

This is the errors I got:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at java.awt.Container.updateGraphicsData(Container.java:1158)
        at java.awt.Container.updateGraphicsData(Container.java:1160)
        at java.awt.Container.updateGraphicsData(Container.java:1160)
        at java.awt.Container.updateGraphicsData(Container.java:1160)
        at java.awt.Container.updateGraphicsData(Container.java:1160)
        at java.awt.Component.setGraphicsConfiguration(Component.java:1153)
        at java.awt.Window.setGraphicsConfiguration(Window.java:3177)
        at java.awt.Window.initGC(Window.java:478)
        at java.awt.Window.initDeserializedWindow(Window.java:2987)
        at java.awt.Window.readObject(Window.java:3075)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
        at javax.swing.event.EventListenerList.readObject(EventListenerList.java:274)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2285)
        at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:561)
        at javax.swing.JComponent.readObject(JComponent.java:5467)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1973)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1565)
        at java.io.ObjectInputStream.access$800(ObjectInputStream.java:214)
        at java.io.ObjectInputStream$GetFieldImpl.readFields(ObjectInputStream.java:2450)
        at java.io.ObjectInputStream.readFields(ObjectInputStream.java:601)
        at java.awt.Container.readObject(Container.java:3720)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1973)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1565)
        at java.io.ObjectInputStream.access$800(ObjectInputStream.java:214)
        at java.io.ObjectInputStream$GetFieldImpl.readFields(ObjectInputStream.java:2450)
        at java.io.ObjectInputStream.readFields(ObjectInputStream.java:601)
        at java.awt.Container.readObject(Container.java:3720)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
        at GameLogic$Main.actionPerformed(GameLogic.java:278)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6533)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
        at java.awt.Component.processEvent(Component.java:6298)
        at java.awt.Container.processEvent(Container.java:2238)
        at java.awt.Component.dispatchEventImpl(Component.java:4889)
        at java.awt.Container.dispatchEventImpl(Container.java:2296)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4897)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4475)
        at java.awt.Container.dispatchEventImpl(Container.java:2282)
        at java.awt.Window.dispatchEventImpl(Window.java:2746)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
        at java.awt.EventQueue$4.run(EventQueue.java:733)
        at java.awt.EventQueue$4.run(EventQueue.java:731)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)



What I have tried:

class GameLogic extends ... {
/*...
.
.
.*/

static Board board;
/*...
.
.
.*/

else if(btnTxt.equals("Save")) {
				
				try {
				FileOutputStream file = new FileOutputStream("chess.txt");
				ObjectOutputStream object = new ObjectOutputStream(file);
				object.writeObject(board);
				object.close();
			 // create a dialog Box 
			 JFrame f = new JFrame();
            JDialog d = new JDialog(f, "Chess Game"); 
  
            // create a label 
            JLabel l = new JLabel("Game is successfully saved!"); 
  
            d.add(l); 
  
            // setsize of dialog 
            d.setSize(200,100); 
			d.setLocationRelativeTo(null);
  
            // set visibility of dialog 
            d.setVisible(true); 

			}
			catch(Exception ex)
			{
				ex.printStackTrace();
			}


		} // close save
		else if(btnTxt.equals("Continue"))
		{
			JFrame fr1 = new JFrame();
			try {
		FileInputStream fileInputStream = new FileInputStream("chess.txt");
		BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
		ObjectInputStream objectInputStream = new ObjectInputStream(bufferedInputStream);
		Board object = (Board)objectInputStream.readObject();
		objectInputStream.close();
		} catch(IOException fe)
		{
			fe.printStackTrace();
		} catch(ClassNotFoundException ce)
		{
			ce.printStackTrace();
		}
		} // close continue

解决方案

800(ObjectInputStream.java:214) at java.io.ObjectInputStream


GetFieldImpl.readFields(ObjectInputStream.java:2450) at java.io.ObjectInputStream.readFields(ObjectInputStream.java:601) at java.awt.Container.readObject(Container.java:3720) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571) at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1973) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1565) at java.io.ObjectInputStream.access


800(ObjectInputStream.java:214) at java.io.ObjectInputStream


这篇关于如何从文件加载游戏数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆