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