2013-06-22 42 views
0

我构建了一个事件通知系统,该系统接收由设备生成的事件。我有两个主要组件:Listener和Publisher。发布者将发送轮询命令给设备并捕获事件。然后,它会通过EventBus将所有事件通知给Listener(我使用了Guava的EventBus库)。现在我实现了一个View组件。视图是观察者,模型是可观察的。当侦听器收到事件时,它将通知视图。 视图扩展了JFrame并实现了Observer。在像这样的构造函数中: public View(Listener),我只是将View作为观察者注册到监听器视图取决于模型(MVC)

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

+0

快速解决方法是将JFrame的defaultCloseOperation设置为JFrame.DISPOSE_ON_CLOSE。一个更好的解决方案是可能将视图从模型中分离出来,或许在不同的JVM上运行它们,为它们提供一些通信机制,可能通过Streams作为一种简单的方法来实现。有更高层次的做法可以让对象转移(我认为RMI和JINI就是例子),但我从来没有这样做过,所以不能从经验中发言 - 这就是为什么这是一个评论,而不是一个答案。 –

+0

也许你可以分享一些你的代码,这样你就可以看到究竟是什么关闭你的程序。否则,它会疯狂猜测,例如你可以使用System.exit(0)以某种形式关闭你的视图,而不是像处理气垫船一样处置.. – Akunosh

+0

@Akunosh:'System.exit(...)'是如果视图和模型在同一个JVM上运行,他希望做的最后一件事情。它将保证模型将关闭,并且与OP试图实现的完全相反。 –

回答

0

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