不使用自动迁移功能的技术
Visual J# .NET 和 Java Language Conversion Assistant(Java 语言转换助手)的目标都是 Java 语言、JDK 1.1.4 库以及 Visual J++ 6.0 附带的 Microsoft 库。有些应用程序还使用 J2EE、J2SE 等新 Java 版本的技术。这些应用程序在迁移到 .NET 时常常需要进行一些额外修改。这些修改通常非常简单:迁移后,应用程序的大部分(业务逻辑和 JDK 1.1.4 类)都会得到完美的迁移。在迁移后的代码中,不支持的技术将保留不变。您必须使用类似的 .NET 技术替换未迁移的 Java 技术以完成迁移。由于 .NET 提供了一套比 Java 更丰富的类,因此在进行技术替换时您常常可以进行一些重大改进。
Swing 窗体软件包的迁移是一个很好的例子。
迁移 Swing
Java 包含两个竞争的窗体软件包:Abstract Windowing Toolkit (AWT) 和 Swing。JDK 1.1.4 提供 AWT。Visual J# .NET 支持 AWT,可以通过 Java Language Conversion Assistant(Java 语言转换助手)将 AWT 转换为 Windows 窗体。JDK 1.1.4 可以使用一个附加的 Swing 库,这个库是 J2SE 和 J2EE 类库的一部分。Swing 窗体布局不能自动迁移到 .NET。在迁移过程中,代码中的 Javax.Swing 类保留不变,您必须用 Windows 窗体类来替换它。为此,请在被迁移的应用程序中对各 Swing 窗体执行以下步骤:
向被迁移应用程序中添加一个新的 Windows 窗体
向窗体中添加控件以获得与原有 Swing 窗体相同的布局
将事件逻辑代码从被迁移的 Swing 窗体复制到新的 Windows 窗体中的事件处理程序
从应用程序中删除被迁移的 Swing 窗体
图 2:在 Visual Studio 中重画 Swing 窗体
Windows 窗体提供了比 AWT 或 Swing 更丰富的环境,并且几乎在所有方面都包含 Java 平台中所能找到的功能的超集。例如,Windows 窗体使得控制窗体布局更加容易。Java 中的布局管理器常常会带来困难。获得所需的窗体布局需要了解布局管理器,并且即使是最基本的布局都需要编写许多代码。Windows 窗体通过为所有控件提供绝对定位而简化了窗体管理。另外,Windows 窗体可以通过靠接和锚定轻易地调整窗体大小。靠接规定一个控件应该始终占据屏幕的特定区域。锚定将窗体控件的一个或多个角“钉住”。调整窗体大小时使用这些“钉”确定控件的位置。使用靠接和锚定通常可以彻底消除复杂的窗体大小调整代码。
将 Swing 窗体迁移到 .NET 不仅非常简单,而且还可以利用 .NET Framework 更丰富的类改善应用程序。
迁移 Java Server Page
Java Server Page (JSP) 和 Servlet 都是创建支持 Java 的 Web 页的技术。JSP 提供了与 ASP 相似的脚本嵌入式 HTML 体系结构。Servlet 为没有 HTML 代码的编译后 JSP 页提供了一个机制。两项技术都使用 Java 代码,都为 Web 页提供基于事件的编程。
JSP 和 Servlet 可以迁移到 ASP.NET,这么做有很多好处:ASP.NET 是一种更加强大的技术,它比 JSP、PHP(PHP 超文本预处理器)、ASP 及其他解释型脚本嵌入式 HTML 体系结构具有更高的可伸缩性和性能。但是,在撰写本文时还没有将 JSP 迁移到 ASP.NET 的自动系统。Microsoft 已经宣布在 2002 年下半年推出将 JSP 转换为 C# ASP.NET 的 Java Language Conversion Assistant(Java 语言转换助手)扩展。同时也在考虑今后推出 JSP 到 Visual J# .NET ASP.NET 的转换。
演练
本节演练从 Visual J++ 6.0 到 Visual J# .NET 的升级和从 Java 到 C# 的转换。两个演练的目的都是介绍迁移技术。显然,两种迁移都远远不止这里介绍的内容。另外,可以使用任意一种迁移技术很好地迁移这两个应用程序示例。
如何将 Visual J++ 6.0 项目升级到 Visual J# .NET
本节将一步步演练 Visual J++ 6.0 应用程序升级到 Visual J# .NET 和 .NET 的过程。
要升级的应用程序是 MDIWordPad 项目。这是 Visual J++ 6.0 附带的 MSDN 示例,可以作为 Visual J++ 6.0 产品示例的一部分下载。此应用程序的功能与 WordPad 相似。它提供打开和编辑多个文本文件的功能。它还提供简单的格式化功能。这些功能是通过菜单或工具栏提供的。图 3 是 MDIWordpad 应用程序的 Visual J++ 版本。
图 3:用 J++ 编写的应用程序 MDIWordPad
为了得到最佳结果,应该使用 Visual J# .NET Upgrade Wizard(Visual J# .NET 升级向导)将 Visual J++ 6.0 项目升级到 Visual J# .NET。请按以下步骤进行升级:
在 Visual Studio .NET 中,从菜单中选择 File(文件),再选择 Open(打开),然后选择 Project(项目)。
找到 MDIWordPad.vjp 项目文件的位置并单击 Open(打开)。
Visual Studio .NET 检测到您要打开的文件是 Visual J++ 6.0 项目并打开 Visual J# .NET Upgrade Wizard(Visual J# .NET 升级向导)。
阅读完介绍文字后,单击下一步进入向导的第二页。此页面要求提供您正在升级的项目的类型信息。MDIWordPad 示例是一个 Windows 应用程序,因此默认值是正确的。如果您要升级的项目是一个控制台应用程序或类库,您就应该选择一个选项。确认选定了 Windows 应用程序后,单击下一步进入升级向导的下一页。
图 4:Visual J# .NET Upgrade Wizard(Visual J# .NET 升级向导)提示选择项目目标类型
对于使用 Active X 控件或其他 COM 引用的应用程序,您可以在这一页上明确添加对这些组件的引用。添加这些引用可以帮助升级向导找到项目中使用的附加类型。虽然即使您不在这里指定它们,升级向导也可以找到并将这些引用添加到项目中,但是现在添加它们可以加快升级速度。MDIWordPad 没有使用任何外部组件,因此请单击 Next(下一步)而不需要做任何改动。
现在,升级向导开始评估项目并将项目文件和引用升级到 Visual J# .NET。会显示一个状态条和变化的文本,提示向导目前的进度。处理结束之后,升级向导将自动进入最后一页。
在向导的最后一页中,您可以使用一个复选框选择是否查看项目升级报告。单击 Finish(完成)显示升级报告。升级报告列出了有关应用程序及升级进程的信息。如果在项目转换中发现了问题或丢失的引用,它们将在这里列出。该报告中还包括有关升级向导向新解决方案中添加的文件的信息。
在 Solution Explorer(解决方案资源管理器)中双击文件 MDIWordPad.java 以便在 Code Editor(代码编辑器)中将其打开。通过浏览该文件,您会发现源代码看起来与原先完全相同。事实上,将一个项目升级到 Visual J# .NET 并不要求任何形式的源代码修改,所要求修改的只是解决方案、项目和资源文件。源代码文件本身的内容保持不变。
按 F5 运行升级后的应用程序。用程序的表现没有变化,您可以通过编辑一些文本来验证这一点。应用程序的操作与升级前完全相同,只是它现在是运行在 .NET 上。
图 5:MDIWordPad 的升级版本,运行在 Visual Studio .NET 上,使用 .NET
将应用程序升级到 Visual J# .NET 是一个非常简单的过程。升级向导会帮助您提供顺利升级所需的信息,并且升级后项目的源代码没有任何变化。通过 Visual J# .NET 提供的工具升级到 .NET 是一个极其快速和简单的过程。由于二者有相似的语言和类库,因此升级到 Visual J# .NET 是将 J++ 项目迁移到 .NET 的最快方法。
如何将 Java 项目转换到 C#
本节将一步步演练将一个 Visual J++ 6.0 应用程序转换到 C# 和 .NET 的过程。要转换的应用程序是一个称为 Island Book Sales 的简单的最终用户购买程序。该应用程序演示转换的各个方面(AWT 到 Windows 窗体、JDBC 到 ADO.NET、Java 到 C#)。它还演示转换后需要解决的一些问题。Island Book Sales 有两个窗体。第一个窗体向用户展示可供出售的书的列表。所提供的书包含在一个 Access 数据库中,可使用 JDBC 读取该数据库。用户可以选择要购买的物品并将它放入购物车中。用户的购物车显示在第二个窗体中。该窗体使用户能够取消或购买购物车中的物品。图 6 是运行中的应用程序。
注意:您必须将数据库 bookstore.mdb 注册为 ODBC DSN 才能运行 Bookstore 应用程序。
图 6:Island Book Sales 应用程序
以下是将应用程序转换到 C# 和 .NET 所需的步骤:
在 Visual Studio 中的 File(文件)菜单上单击 Open(打开),然后单击 Convert(转换)。
这将启动 Conversion(转换)对话框。
选定 Java Language Conversion Assistant(Java 语言转换助手)图标后单击 OK(确定),启动 Java Language Conversion Assistant(Java 语言转换助手)。
虽然原应用程序是使用 Visual J++ 编写的,但本例中将它视作一个基于目录的转换。在向导的第二页中选择进行基于目录的转换选项,然后单击 Next(下一步)。
在 Java Language Conversion Assistant(Java 语言转换助手)的第三页中,选择包含应用程序源代码的目录,然后单击 Next(下一步)。
向导的第四页要求您输入一些有关应用程序的信息。键入“Bookstore”作为项目名。其他两个选项使用默认值,然后单击 Next(下一步)。
图 7:提供有关您的项目的信息
现在,Java Language Conversion Assistant(Java 语言转换助手)询问将转换后的项目文件写到哪里。选择要使用的目录后单击 Next(下一步),必要时让 Java Language Conversion Assistant(Java