不使用自动迁移功能的技术
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
闽公网安备 35060202000074号