java UI应用程序 - 将UI与逻辑分开并正确处理线程

时间:2014-06-04 11:15:30

标签: java swt threadpool

我正在设计一个也涉及使用数据库的UI应用程序。我理解我应该将数据库逻辑UI层彼此分开。
但我不明白我应该从哪个层调用main函数,以及从哪个层应该处理线程池。

我到目前为止尝试做的是将main函数和线程池放在逻辑包中(在一个名为mainAppClass的类中),并从那里启动UI类的实例(不在不同的线程上) )。
当UI层想要打开一个新线程时,它将使用mainAppClass中的线程池。

当我尝试这个时我得到org.eclipse.swt.SWTException:无效的线程访问 我理解(从以前的堆栈流程问题)我得到此错误,因为UI线程只能从"主UI线程运行"。
但是我的应用程序中的这个主要UI线程是什么?

基本上我的问题是:

我应该把主要功能放在哪里? (whick包UI或逻辑)
如果在逻辑包中,那么我应该在不同的线程中实例化UI吗?

我应该为UI和逻辑层使用不同的线程池吗?

还指向涉及所有三个不同图层的应用程序的简短示例的链接将很棒。

感谢

1 个答案:

答案 0 :(得分:0)

您的主要课程应该在UI包中。

我不知道SWT,但通常你有单个GUI线程,并且从它的声音中你试图在一个单独的线程上运行UI代码(因此例外)。从本质上讲,你不应该有一个用于运行UI代码的线程池(或者至少我想不出你为什么会想要一个这么好的理由)。

但是,您尚未发布任何有关您尝试完成的内容的详细信息,因此很难知道建议的内容。但通常你会使用线程池来避免锁定UI线程(因此它将存在于UI包中)。

有关线程的详细信息,请查看以下内容。它有一个与Swing相关的线程示例,可以帮助您更好地理解线程和GUI之间的关系。

https://www.udemy.com/java-multithreading/

您还可以考虑查看以下书籍。它专注于测试,但它有一个示例GUI应用程序,它提供了一个关注点分离的好例子(不幸的是它也使用了Swing)。至少,网站上提供了示例代码以供查看。

http://www.growing-object-oriented-software.com/

通过'database-logic-ui'我假设您粗略地引用了3层架构。考虑前两层和UI之间关系的最佳方法是用基于Web或基于控制台的界面替换UI需要什么?

作为一个非常粗略的经验法则,无论代码如何变化,对于每种不同的表示方法(db代码,业务逻辑等),都应该位于前两层。由于main方法对于每种类型的表示层都不同,因此它应该驻留在UI包中。

此外,您的逻辑和物理设计似乎令人困惑。 “Java应用程序架构:模块化模式与示例使用OSGi”这本书很好地概述了差异,并使代码的不同部分应该更加清晰。

抱歉,我无法提供帮助,但希望这足以让你入门。祝你好运!