Java 视图依赖于模型(MVC)

Java 视图依赖于模型(MVC),java,swing,model-view-controller,Java,Swing,Model View Controller,我构建了一个事件通知系统,接收设备生成的事件。我有两个主要组件:侦听器和发布器。Publisher将向设备发送轮询命令并捕获事件。然后,它将通过EventBus(我使用了Guava的EventBus库)向侦听器通知所有事件。现在我实现了一个视图组件。视图是观察者,模型是可观察的。当侦听器接收到事件时,它将通知视图。 视图扩展了JFrame并实现了Observer。在构造函数中,例如: 公共视图(侦听器),我只是将视图注册为侦听器的观察者 问题是当我关闭视图时,程序也关闭了。如何使视图独立于模型?

我构建了一个事件通知系统,接收设备生成的事件。我有两个主要组件:侦听器和发布器。Publisher将向设备发送轮询命令并捕获事件。然后,它将通过EventBus(我使用了Guava的EventBus库)向侦听器通知所有事件。现在我实现了一个视图组件。视图是观察者,模型是可观察的。当侦听器接收到事件时,它将通知视图。 视图扩展了JFrame并实现了Observer。在构造函数中,例如: 公共视图(侦听器),我只是将视图注册为侦听器的观察者

问题是当我关闭视图时,程序也关闭了。如何使视图独立于模型?
请帮助我。

我认为您可以创建一个控制包,负责将消息从视图发送到模型。

一个快速解决方法是将JFrame的defaultCloseOperation设置为JFrame.DISPOSE\u ON\u CLOSE。更好的解决方案可能是将视图与模型进一步分离,可能在不同的JVM上运行视图,为它们提供一些通信机制,可能通过流作为一种简单的方法。有更高层次的方法可以传输对象(我认为RMI和JINI就是例子),但我从来没有这样做过,因此不能从经验中说话——这就是为什么这是一个注释而不是答案。也许你可以分享一些代码,这样你就可以看到到底是什么关闭了你的程序。否则这将是一个疯狂的猜测,例如,您可以使用System.exit(0)以某种形式关闭视图,而不是像hovercraft sugested那样使用da dispose…@Akunosh:
System。如果视图和模型在同一JVM上运行,则exit(…)
是他最不想做的事情。这将保证模型将关闭,并且与OP试图实现的目标完全相反。嗨@HovercraftFullOfEels,我考虑过你的解决方案。因为视图是在与模型相同的main()类中创建的。“但我不知道如何实现这一机制。”我所知道的有很多。也许我翻译错了。我只是怀疑代码当前包含某种形式的System.exit(…),例如JFrame.exit\u ON\u CLOSE。我想说的是,没有人能从他的描述中知道到底是什么关闭了他的模型。