Java EE和桌面应用程序

9

我刚学Java,只是写了一些简单的代码。

我在Linux机器上使用vim编辑器,使用javac进行编译,使用“java”运行程序。

基本上,目前我想用Java构建桌面应用程序。我听说过Java(EE / SE / ME),我的假设是:

  • "核心Java"是"基础"Java语言(包括有关变量、循环、方法类等的所有规则)。
  • Java SE用于桌面应用程序。
  • Java EE用于Web应用程序(使用HTTP协议)。
  • Java ME用于移动应用程序。

然而,我了解到它们之间的区别在于“规范”,来自Java SE和Java EE之间的区别

所以我的问题是,我可以使用Java EE创建桌面应用程序吗?还是它们只用于创建Web应用程序?


你需要一个桌面GUI的API。请参阅http://en.wikipedia.org/wiki/Swing_(Java) 或类似的网站。 - Michael Levy
迈克尔,我最近听说Swing已经过时了,Netbeans是现在首选的用户界面工具。这是真的吗? - M-D
3
不。像Eclipse/NetBeans这样的工具作为RCP的替代方案有一些吸引人的好处。顺便说一下,NB使用Swing(Eclipse使用SWT)。它是一个应用程序框架,而Swing/SWT是GUI框架。 - Dave Newton
5个回答

9

Java EE 是一个涵盖多种技术的集合,这些技术共同构成了一个相对一致的框架,用于构建企业应用。

现在,在企业中,服务器应用程序被广泛使用,因此许多技术都专注于服务器功能和/或多用户。提供Web请求只是其中的一部分,还有用于处理消息(JMS)和服务器远程方法调用(远程EJB)等功能。

完整的 Java EE 实现,如 GlassFish 或 JBoss AS,在桌面应用程序中并不经常使用(除非它是一个面向个人桌面使用的应用程序,但这是基于浏览器的)。

然而 ...

几乎所有构成 Java EE 的技术都可以独立地在 Java SE 上使用,并与图形用户界面结合使用。

例如,Java EE 中有一个名为 JPA 的 ORM 框架,使得将对象存储在数据库中变得相当容易。当然,数据库(可能是嵌入式数据库)可以与桌面应用程序一起使用,这通常是有意义的。例如,电子邮件应用程序可能会在这样的数据库中存储邮件。JPA 在其规范中明确指出可在 Java SE 中使用。

Java EE 中还有一个名为 CDI 的依赖注入框架。这使得隔离依赖项并获取它们变得容易。对于 MVC 图形应用程序来说,例如在控制器中获取模型是很自然的选择。与 JPA 类似,CDI 也明确支持 Java SE。

作为最后一个例子,Java EE 默认需要存在 JMS,但在本例中,JMS 甚至不是特定的 Java EE 子规范。Java EE 只需要存在 JMS 提供程序,因此自然地,Java SE 可以使用 JMS(甚至在 JMS API 中有一些仅合法用于 Java SE 的部分)。消息传递在某种程度上可以成为一种架构模式的一部分,它在桌面应用程序和服务器应用程序中一样有用(例如,桌面工具包 Cocoa 就广泛使用了它)。

还有更多可用于桌面应用程序的 Java EE 技术,但希望以上内容能给您带来一些启示。


5

Java EE是一组技术,其中包括Web应用程序。

但是大部分技术并不仅限于此,例如JMS和JPA都是Java EE的一部分,同时也是面向应用类型的通用技术。


3

Java EE是Java SE加上企业技术的组合。因此,您可以使用Java EE构建桌面应用程序。


Jan,你是否曾经使用Java EE创建过任何桌面应用程序? - M-D
@user1089770:你问的问题不对。使用远程连接到JEE应用服务器创建JSE桌面应用程序是相当常见的...不要被这两个术语搞混了。 - home
@家里,我理解我们可以使用Java SE,但我的问题是,我们是否可以在桌面应用程序中使用Java EE(虽然这并不是首选方法)。 - M-D
我想说的是EE等于SE + 一些其他内容。因此,如果您下载EE,可以创建桌面应用程序,因为包含了放置桌面相关API的SE部分。但是,构建桌面应用程序(= GUI)需要EE吗?不需要。 - Jan Zyka
1
@user1089770 不是的,就像我在答案中所说的那样。JEE 包括 Web 功能,但还包括许多其他技术,如 JMS 和 JPA,这些技术通常用于桌面应用程序。不能再清楚了。 - Dave Newton
显示剩余2条评论

3
Java EE只是一组规范。大多数实现需要比JSE使用的Java Runtime Environment更多的东西。
Java的不同部分需要不同类型的容器。

enter image description here

Java EE 6的部分可以在JRE上运行:

Parts of Java EE 6 You can run on JRE

关于JSR 299的说明,来自Weld网站

但是规范并不限制CDI仅适用于Java EE环境。在Java SE环境中,服务可以由独立的CDI实现(例如Weld,请参见第18.4.1节“CDI SE模块”)提供,甚至可以由容器提供,该容器还实现了EJB 3.1规范为嵌入式使用定义的子集。

GlassFish也可以在同一JVM中的Java EE应用程序中运行Java SE应用程序嵌入式企业Bean容器,因此您可以使用本地接口访问Java EE的EJB,例如。

图片来源


我完全不同意这个说法:“大多数实现需要比用于JSE的Java运行时环境更多的东西。”所有Java应用程序(SE、EE或ME)都可以使用相同的JRE(JVM)和相同的JDK(javac)。区别只在于内置库的可用性(或Java术语中的规范)。 - M-D

3
好的,各位,我以前对Java很新,现在有点“老”了。所以我能搞清楚。
以下是内容:
唯一需要进行Java开发的是Java编译器,如果我们安装了JDK,就可以获得它,而运行Java实用程序所需的是JVM。所以这些是我们进行任何类型的Java开发所需的唯一东西(无论是桌面、Web还是移动)。
那么Java SE、Java EE和Java ME是什么?
这些是上述两个东西(Java编译器+ JVM)加上一组库(SE用于桌面、EE用于Web、ME用于移动)。因此,如果我们有足够的时间并且已经获得了Java编译器+ JVM,我们可以为所有这些功能构建自己的库。
但是,遵循“不要重复造轮子”的概念,并且因为使用已经运行多年的库/工具会更好,我们都使用SE、EE和ME提供的工具/库。
因此,答案是,我可以只使用Java编译器(Linux机器上的/usr/bin/javac)开发任何类型的应用程序。唯一的问题是会有很多“重复造轮子”的情况。所有Java应用程序都在同一个JVM上运行(无论是什么类型),在Linux(/usr/bin/java)中也是如此。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接