Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类之间的Java数据文件共享_Java_File_Class_Share - Fatal编程技术网

类之间的Java数据文件共享

类之间的Java数据文件共享,java,file,class,share,Java,File,Class,Share,我正在制作一个从文件(序列化objectInputStream)读取的小程序,该文件是一个注册表列表,其中每个条目都有一个设置为true或false的布尔变量 在这个程序中,我有两个独立的JPanel类。一个是A类,可以改变这些变量的值,另一个是B类,检查这些变量是真是假。 这两个类是在带有main方法的gui类下创建的 如果我更改了A类中的变量,如何在B类中看到新的更新值? 我试着在每个类中进行ObjectInput-output流。这意味着,对于每次更改,类都会将其写入一个文件,并在更改/读

我正在制作一个从文件(序列化objectInputStream)读取的小程序,该文件是一个注册表列表,其中每个条目都有一个设置为true或false的布尔变量

在这个程序中,我有两个独立的JPanel类。一个是A类,可以改变这些变量的值,另一个是B类,检查这些变量是真是假。 这两个类是在带有main方法的gui类下创建的

如果我更改了A类中的变量,如何在B类中看到新的更新值? 我试着在每个类中进行ObjectInput-output流。这意味着,对于每次更改,类都会将其写入一个文件,并在更改/读取之前将其读回。 这是可行的,但它是最优的吗?有更好的方法吗

您可以针对这种情况或用例使用设计模式

观察者模式是一种软件设计模式,其中对象, 名为subject,维护其从属项的列表,名为 观察者,并自动通知他们任何状态更改, 通常通过调用他们的方法之一。它主要用于 实现分布式事件处理系统


您可以创建一个C类来保存您读取的信息。因此,B类读取数据并将信息放入C类。当A类更改A值时,它将触发事件通知B类


您可以使用
HashMap
来存储数据。字符串是值的名称,布尔值是值。然后,您可以在类B中创建类似于
public void update(字符串名称,布尔newValue)
的方法。此方法将更新值,然后在需要通知新值的所有类中调用方法

我认为这是和模式的典型用例

控制器
注册模型及其观察者

它接收进行更改的请求(事件),并将其委托给
模型
。当模型更改时,它会通知观测者模型有一个新状态,他们应该采取措施来获得这些更改

在您的情况下,
Main
可以用作
控制器
观察者
将是您的
Panel1
Panel2

剩下的是
模型
,您需要创建一个新类,它只处理文件的读写。实际上,您似乎在A级中拥有此代码,即
Panel1
。此代码需要从它移动到新类

注意,jdk已经提供了一个接口和一个类

编辑


java()中的简单示例

您应该将数据与gui分离。尝试使用模型视图控制器设计。 此外,您还可以在类A/B中使用ActionEvents/ActionListeners。
请提供有关数据显示方式的更多信息。

+1用于显示
MAIN
。呵呵,非常感谢!我回答得太慢了。请参阅A4L和JSS的答案。他是否应该使用Observer设计模式?好的,那么,如果我创建一个C类,使用读方法和写方法(ObjectOutputStream和ObjectInputStream)。然后在每个类A和B中,我用C methodClass=new C()实现类C;然后调用methodClass.readFromFile();或methodClass.writeToFile();因为我不能使它们成为静态方法,是吗?你可以将C类作为一个单例类。因此,您不调用类C的构造函数,而是调用一个静态方法(例如,
getInstance()
)来检索类C的实例。然后类C持有自己的实例(也是静态的),如果该值为null(起始值),则类C在
getInstance()
@JSS中调用自己的构造函数。我不知道这是否更好。如果有更多的课程来听这个事件,那就更好了。但是对于两门课。。我不知道……谢谢你的回答!=)我没有创建getInstance,但是我通过类A和B的构造函数发送了类C。然后在每个类中分别调用C的读/写方法,每次进行更改时。我想知道,这比观察者设计模式消耗更多的计算机能力吗?嗨,谢谢你的回答。我试着读了一些关于观察者和可观察类的书。你知道有没有关于如何使用它的教程/实践示例或解释?@fuLLMetaLMan嗨,我给你做了一个基本示例,请参见编辑部分的链接。zip包含一个eclipse项目。代码没有注释,很抱歉,但是它非常自我解释。哇!谢谢这是一个非常酷的例子。我不知道为什么我以前没有使用过Observer接口。。“更新”方法,你可以在里面放任何东西,对吗?我很快会留出一些时间,真正了解观察者/可观察到的东西。您知道这种使用观察者的方法是否比从单独的类调用读/写方法更有效,如上面提到的马拉卡?再次感谢您提供的精彩示例!=)=)@不客气!与MalaKa的建议相比,我想说它几乎是一样的(C类->模型,火灾事件->通知观察者,更新->更新),他只是没有给它起一个名字,这就是一般的意思:它们描述了软件开发过程中经常遇到的问题,展示如何解决这些问题的标准方法,并给洞命名、Obeserver、MVC、Factory或其他…@fuLLMetaLMan在您的用例中Observer+MVC再合适不过了!它们的好处是通过松散耦合业务逻辑和视图来分离责任,从而使两者易于扩展和维护。