Borland 的JBuilder
集 成 开 发 环 境 初 窥
(http://it.hisen.com)
经 过 长 时
间 的 储 势 待 时,Borland 终 于 向java IDE 市 场 发 起
了 大 举 进 攻―― 本 文 将 告 诉 你 这 一 工 具 的
够 格 程 度, 以 及 与Symantec 的Visual Cafe 相 比, 它
究 竟 如 何.
摘 要 java 最
先 发 布 之 初,Borland 是 率 先 进 入java 工 具 市 场
的 公 司 之 一。 那 时 的 所 谓 进 入, 就 是 将java
作 为 附 属 物," 粘 贴" 在 他 们 的C++ 产
品, 即Borland C++ 5.0 之 上。 这 一 战 略 决 策, 与Symantec
公 司 所 遵 从 的 做 法 大 致 相 同,Symantec 最 初 也
是 利 用 其 已 有 的IDE 编 码 基 地, 然 后 才 转 移
到 专 用 的 编 码 基 地 之 上 的。 但 在 对java 付 出
最 初 努 力 之 后,Borland 经 历 了 一 段 时 间 的 反
思, 它 在java 工 具 的 前 沿, 从 表 面 上 看, 几
乎 没 有 获 得 什 么 进 展。 现 在, 随 着JBuilder 的
发 布,Borland 将 就java 工 具 市 场 提 出 新 的 势 力
划 分 要 求。
在1995 年7
月, 当 我 初 次 听 到Borland 将 生 成 一 个java 开 发
工 具 的 时 候, 我 就 非 常 高 兴。 由 于Borland 公
司 是 唯 一 的 一 家 可 以 削 弱Microsoft 所 制 造 的Visual
Basic 特 许 权 的 公 司。 而 且,Borland 公 司 的Delphi
开 发 环 境, 被 众 多 的 开 发 者 认 为 是 市 场 上
最 好 的 快 速 应 用 开 发(RAD) 工 具。 因 此, 在95
年 未, 当 我 买 到 了 支 持Java 的Borland C++ 时, 我
曾 十 分 激 动。
然 而 不 幸
的 是, 那 时Borland 的 努 力 与 所 期 望 的 还 相 差
甚 远。 这 一 产 品 的 最 大 缺 点 就 是 其 对java 的
支 持 其 实 是 将java 以 一 种 嵌 入 模 式(add-on module)
加 入 到C++ 中, 而 不 是 开 发 一 个 有 自 身 特 色
的 工 具。 将java 嵌 入C++ 中 的 做 法 所 带 来 的 一
个 难 题, 就 是 从 编 译 部 件、 对 象 文 件 和 编
译 目 标 等 等 方 面 来 看,java 都 与C++ 格 格 不
入。 在java 环 境 中, 你 编 译 了 一 个 类 文 件 成
为 对 象 之 后, 你 就 可 以 实 例 化 在 你 的 系 统
上 已 有 的 其 它 对 象。 在 这 种 情 况 下, 没 有
在 继 承 式 的C++ IDE 中 应 用 的, 诸 如".exe"
和".dll" 之 类 的 目 标 文 件。 因 此, 利 用
这 一 工 具, 创 建 一 个Java 类 是 十 分 麻 烦 的,
类 文 件 几 乎 可 算 是 不 存 在, 可 以 这 么 说,
对 它 的 体 验 整 个 来 说 都 是 不 满 意 的。 尽 管
它 的C++ 编 译 器 做 得 十 分 强 大。
在 这 个 嵌
入 式 的C++ 产 品 推 出 之 后, 有 关"Latte" 的
消 息 也 开 始 传 扬 了 出 来。"Latte" 是 他
们 给 将 要 开 发 的IDE 环 境 所 起 的 名 称 代 码,
这 个IDE 环 境 将 由 来 自 于Delphi 开 发 组 的 工 程
师 来 开 发, 但 它 将 全 部 采 用java 语 言 来 编
写。 然 而, 这 个 雄 心 勃 勃 的 开 发 项 目 却 迟
迟 不 能 得 到 实 现;1996 年, 在San Francisco 的 第 一
次JavaOne 开 发 者 会 议 上, 展 出 了 它 的 演 示
版, 接 下 来 的97 年JavaOne 会 议 上, 只 能 又 一 次
看 到 它 的 演 示。 终 于, 时 至 今 日, 这 一 期
待 已 久 的 产 品 被 定 名 为JBuilder, 正 式 发 布 推
出。
JBuilder快速巡游
JBuilder 共 享
了 许 多Delphi 世 界 的 主 旋 律, 而 且 可 感 觉 到
它 酷 似Symantec 的Visual Cafe 工 具。 因 此, 对 我 来
说, 要 想 让JBuilder 转 起 来 是 十 分 容 易 的――
即 使 不 去 读 所 提 供 的 文 件。( 当 我 确 实 有
疑 问 的 时 候, 从 其 所 描 述 的 可 选 项 上 看,
这 个 文 件 是 相 当 完 备 的。)
JBuilder 环 境
包 括 一 个" 控 制 棒"( 它 是 一 个 可 浮 动
的 工 具 条 窗 口) 和 一 个" 浏 览 窗 口"( 在
这 个 窗 口 中, 左 边 有 一 个 可 层 叠 的 树 型 控
件, 右 边 是 一 个 查 看 窗 口)。 在 此 环 境 中,
只 能 打 开 一 个 控 制 棒, 但 能 打 开 多 个 浏 览
窗 口。
控
制 棒, 包 括 了 横 在 顶 端 的 标 准 菜 单 命
令、 一 组 位 于 左 上 方 的 快 捷 工 具 条、 以 及
一 系 列 你 可 以 在 你 的 应 用 系 统 或applet 中 使
用 的 组 件(JavaBeans). 在 快 捷 工 具 条 和 组 件 的
下 方 是 一 个 状 态 行, 它 将 随 着 当 前 活 动 状
态 的 改 变 而 不 断 变化。
浏 览 窗 口 是 你 与 你 的 源 文 件( 不 论 是HTML 还
是Java) 进 行 交 互 的 场 所。 在 浏 览 窗 口 之 上
的 是 控 制 棒, 它 可 使 你 产 生 一 些 动 作( 例
如rebuild 你 的 应 用 程 序) 并 且 还 保 存 着 在 你
的 应 用 程 序 中 可 能 用 到 的 一 系 列JavaBean。 另
外, 每 一 个 浏 览 窗 口 能 够 显 示 其 中 各 个 项
目 的 开 展 情 况, 因 此, 如 果 你 需 要 同 时 在
多 个 开 发 项 目 上 工 作―― 例 如 开 发 一 个 新
的JavaBean 和 应 用 这 个JavaBean 的 应 用 程 序―― 那
么 你 只 需 将 这 些 项 目 打 开 一 次, 就 可 以 在
这 些 项 目 之 间 实 现 翻 动 转 换。 这 个 功 能 给
我 很 深 的 印 象, 因 为 它 支 持 最 通 常 情 况 下
的Java 开 发: 需 要 马 上 实 现 在 几 个 不 同 组 成
部 分 之 间 的 翻 转, 在 某 个 浏 览 窗 口 中, 可
能 是 工 具 类 项 目, 在 另 一 个 浏 览 窗 口 中,
是 应 用 这 些 工 具 类 的Applet, 而 在 第 三 个 窗 口
中, 是 应 用 这 个Applet 的 一HTML 语 言。
浏 览 窗 口
被 垂 直 分 隔―― 在 左 边 的 是 文 件 树 视 图,
右 边 的 是 一 个 查 看 窗 口。 垂 直 分 隔 在 系 统
中 被 称 为"curtain( 帘 子)"。 当 你 需 要 全
屏 幕 查 看 你 所 写 的 源 代 码 的 时 候,Borland 的
用 户 界 面 允 许 你 撤 去curtain。 在 每 个 浏 览 窗
口 的 下 部, 是 一 些 控 制 标 签, 它 能 够 根 据
你 所 选 的 视 角 转 换 浏 览 窗 口 的 显 示 内 容。
当 查 看java
源 代 码 的 时 候, 在 浏 览 窗 口 下 部 的 标 签 分
别 是source( 源 代 码),design( 设 计), 和doc( 文 件)。
- 点 击source 标 签, 将 显 示 你 的Java 源 代 码,
而 且 你 可 以 利 用JBuilder 所 带 的 句 法 加 亮
编 辑 器 来 编 辑 你 的 源 代 码。
- 点 击design 标 签, 将 显 示 一 个 可 视 化 的 工
作 空 间, 其 中 有 你 定 义 的 用 户 界 面 信
息。 例 如, 如 果 你 的 源 代 码 中, 有 面 板
定 义, 按 钮 等 等, 那 么 这 个 面 板 就 是 在
组 织 界 面 信 息 时, 你 能 进 行 拖 放(drag-and-drop)
操 作 的 领 域。
- 点 击doc 标 签, 将 向 你 显 示 从 源 代 码 的
嵌 套 注 释 中 产 生 出 来 的HTML 文 件。 利 用JavaDoc,
可 以 抽 取 出 这 个HTML 文 件, 然 而, 我 却 不
能 找 到 一 个 自 动 化 的 方 法, 来 产 生 这 一
文 件。
或 许 浏 览
窗 口 实 现 中, 最 精 明 的 一 点 就 是, 当 你 在
浏 览 一 个 类 文 件 的 时 候, 浏 览 器 可 读 入 类
文 件 并 且 能 够 将 其 反 编 译, 足 使 你 可 以 看
清 源 代 码 的 结 构 情 况。 这 在 你 习 惯 于 阅 读
源 代 码, 而 不 习 惯 于 查 看 对 象 图 表 的 情 况
下, 将 会 十 分 有 用。 此 外, 当 你 选 择 了 任
何 一 个java 标 准 类 或 是Borland 定 制 的 类 后, 点
击doc 标 签, 将 会 返 回 这 个 类 的javaDoc 页 面。
它 允 许 你 做 如 下 的 事 情: 加 亮 一 个 系 统
类, 选 择"browse selected symbol", 并 且 可 以
观 看 这 个 类 的 重 建 源 代 码 或HTML 文 件。 我 喜
欢 这 个 功 能, 它 保 存 了 嵌 入javaDoc 数 据 中 的HTML
文 档 的 格 式, 从 整 体 上 讲, 它 可 将java 文 件
转 换 为Microsoft 的"help" 文 件。
JBuilder调试 程 序
当
然, 编 写 代 码 是 容 易 的。 但 要 弄 转 它 就 不
那 么 简 单 了。 或 许 对 于 任 何 一 个IDE 而 言,
最 重 要 的 特 性 就 是 其 调 试 程 序(debugger)。 幸
运 的 是,Borland JBuilder 的 调 试 程 序 没 有 让 人 失
望。
在 调 试 过
程 中, 浏 览 窗 口 被 重 新 设 置, 以 帮 助 你 看
到 类 的 状 态。 树 结 构 文 件 视 图 被 分 成 上 下
两 个 窗 口, 上 一 个 窗 口 包 括 线 程 状 态, 下
一 窗 口 包 括 了 活 动 变 量 的 信 息。 而 且, 左
边 的 浏 览 器 的 下 部 还 增 加 了 一 些 标 签, 以
控 制 调 试 程 序 的 运 作。
另 外, 弹 出
窗 口 将 在 源 程 序 窗 口 中 显 示 一 个 变 量 的
值, 这 与Symantec 调 试 程 序 的 工 作 情 况 大 致 相
同。 所 有 的 标 准 调 试 特 征 都 提 供 在 调 试 程
序 中: 单 步 调 式、 监 视 点、 断 点、 假 设 断
点 等 等。 这 里, 值 得 注 意 的 是 对 它 对 线 程
的 支 持, 这 是 其 最 杰 出 的 一 点。 在 左 上 角
的 线 程 窗 口 中, 你 可 以 点 击 在 当 前 正 在 执
行 的 任 何 一 条 线 程 中 的 任 何 一 行 代 码, 源
程 序 窗 口 将 会 马 上 跳 到 源 代 码 中 的 相 应
位 置。 此 外, 在 左 下 方 的 窗 口 中, 将 会 显
示 这 一 线 程 可 见 的 任 何 一 个 本 地 的 或 全
程 的 状 态 变 量。JBuilder 的 调 试 程 序 代 表 了 新
的 调 式 程 序 标 准, 对 当 前 其 它 的Java 调 试 程
序 标 准 将 肯 定 构 成 不 小 的 冲 击。
在 源 代 码
窗 口 的 左 侧 上, 有 一 些 小 的 圆 点, 它 表 明
这 些 行 是 你 可 设 置 断 点 的 地 方。 点 击 小 圆
点, 将 加 亮 该 行, 并 且 出 现 一 个 断 点 符
号。 另 一 个 有 用 的 特 征 是"run to cursor"(
运 行 到 光 标 所 在 位 置)―― 在 某 些 情 况 下,
你 可 能 不 想 用 单 步 调 试 来 循 环 反 复, 直 至
走 出 一 个 循 环。 你 可 以 先 点 击 你 想 让 程 序
运 行 到 的 那 一 行, 然 后 选 择"run to
cursor", 那 么 程 序 将 会 立 即 执 行, 并 在 你
点 击 的 那 个 位 置 上 停 下。
输 出 处 理
在JBuilder 中,
我 所 发 现 的 最 后 一 个 特 别 有 用 的 领 域 是
它 对 一 个Java 应 用 程 序 执 行 结 果 输 出 的 处
理。 执 行 日 志(execution log) 是 一 个 容 纳 当 前 执
行 程 序 中, 所 有 传 递 给System.out 的 数 据 的 窗
口。
然 而, 当 在
多 个 项 目 都 打 开 的 情 况 下, 执 行 日 志 将 会
为 每 一 个 项 目 的 运 行 情 况 加 上 一 个 标 签
! 下 面 是 有 关 这 方 面 的 一 个 例 子。 图4
为多 个 项 目 保 持 独 立 的 标 签
从 图 中 可
以 看 到, 执 行 日 志 有 两 个 标 签, 一 个 为"example"
项 目 的 日 志, 另 一 个 为"BASIC" 的 日 志,
它 是 当 前 的 项 目。 这 种 独 立 的 日 志 在 同 时
创 建 多 个 类 库 的 情 况 下 是 十 分 重 要 的, 因
为 它 将 使 你 不 会 把 两 个 项 目 的 输 出 混 淆
起 来。
JBuilder的
什 么 地 方 是 我 所 喜 欢 的
有 些 情 况
下, 这 简 直 就 不 足 以 称 道。 但 我 的 确 喜 欢
它 能 将Java 源 代 码 打 印 到 彩 色 打 印 机 上, 并
且 打 印 出 的 结 果 与 我 们 在 源 代 码 窗 口 中
所 看 到 的 字 体 及 句 法 加 亮 特 色 一 模 一 样。
如 果 我 想 定 制 页 面 的 页 眉 及 页 脚, 并 且 指
定 双 栏 输 出( 在 一 个 输 出 页 面 上, 分 两 栏
打 印 源 代 码), 它 简 直 就 是 完 美 无 缺。
它 对Java 1.1
的 支 持 也 是 非 常 卓 越 的。 在JDK 1.1 被 推 出 一
段 时 间 之 后,Symantec 推 出 支 持1.1 的Beta 版, 但
它 一 点 都 不 象 一 个 可 与1.1 一 起 工 作 的IDE。
正 如 我 上
面 所 说 的,JBuilder 的 调 试 程 序 同 样 也 非 常 出
色: 它 用 通 俗 易 懂 的 方 式 提 供 了 大 量 信
息。 在 此, 许 多 的 调 试 工 作 都 是" 瞄 准――
射 击"(point--and--shoot) 式 的, 对 此 各 人 褒 贬
不 一, 有 的 人 喜 欢( 我 的 确 喜 欢), 有 的 人
不 敢 苟 同。 我 认 为 它 足 以 查 出 即 使 是 最 难
发 现 的 线 程 死 锁 错 误。
我 不 喜 欢
JBuilder的地方
JBuilder 是 一
个 可 以 设 置 的IDE, 但 实 际 上 在 两 种 重 要 情
况 下 却 不 能 进 行 设 置:
首 先, 你 不
能 在 显 示 之 时 设 定 缺 省 的 背 景 和 前 景 颜
色。 相 反, 你 得 先 为 你 的 整 个 桌 面 系 统 进
行 设 置, 此 时JBuilder 才 会 注 意 到 颜 色 的 变
化。 然 而 奇 怪 的 是, 利 用JBuilder 所 提 供 的 颜
色 对(color scheme), 你 也 可 以 进 行 设 置。
第 二 个 严
重 的 缺 陷 是, 你 不 可 以 定 制 编 辑 器 的 快 捷
键。 在 这 方 面, 我 所 喜 欢 的 两 个 编 辑 器 是EMACS
和 程 序 员 文 件 编 辑 器(PFE)。JBuilder 的 编 辑 器
的 定 制 表 能 够 让 你 选 择 一 些 预 装 的 键 盘
映 像( 其 中 包 括default,Brief,Classic 和Epsilon), 它 也
能 够 让 你 去 选 择 采 用 什 么 样 的 方 式, 使 一
些 诸 如 自 动 缩 排, 颜 色 加 亮, 自 动 换 行 等
的 工 作 适 合 你 的 需 要。 但 我 仍 然 希 望 寻 找
到 一 个 能 够 让 你 用Java 去 定 义 宏 的 编 辑 器。
在 表 现 方
面,JBuilder 有 一 些 小 小 的 错 误, 我 希 望 在 第
一 个 发 布 的 修 订(patch) 或 适 当 情 况 下,Borland
能 够 修 正 它 们。 举 个 例 子, 当 你 的 桌 面 系
统 选 择 了" 大 字 体" 的 时 候( 在 这 方
面,Microsoft 坚 持 采 用 以Arial 10 为 基 础, 并 乘 以
其 它 因 数 的 方 法), 有 关 工 具 条 需 要 多 大
空 间 的 计 算 停 止 了, 并 且 组 件 库 的 图 标 也
被 切 去。 另 一 方 面, 如 果 你 在 你 的 桌 面 属
性 中 的"Appearance" 部 分, 明 确 地 设 置 了
显 示 字 体, 例 如14 点 阵 的Arial, 那 么, 组 件 条
将 会 正 确 地 反 映 出 来。 显 而 易 见, 这 是 一
个Microsoft 的 伪 造(10 点 阵 的 字 体 并 不 一 定 显
示 成10 点 阵 的 字 体), 但 是, 这 种 分 歧 只 能
由Borland 来 对 付。
我 不 喜 欢
所 有Java IDE 的 地 方 在 于, 它 们 依 赖 于 它 们 自
己" 定 制 的"Java 虚 拟 机 来 进 行 开 发。 我
希 望 在 将 来, 所 有 的IDE 都 可 以 在 标 准 的Java
Runtime Environment(Java 运 行 时 刻 环 境,JRE) 和 一 些
自 定 义 的 类 库 上 运 行。 目 前, 仍 没 有 人 从
事 这 方 面 的 工 作。
什 么 是 我 希 望 它 能 有 的
当 然, 没 有
一 件 产 品 能 够 对 所 有 人 来 说 都 是 十 全 十
美 的, 因 些 我 提 出 的 看 法 或 许 对 某 些 人 来
说 只 能 会 是 噪 杂 之 言。 但 是, 本 着" 言
者 无 过" 的 精 神, 我 还 是 希 望 在JBuilder( 或
任 何 相 应 的IDE) 中, 能 够 看 到 以 下 三 大 件:
- 能 够 拨 弄IDE 设 置 控 制―― 键 盘 映 射, 显
示 颜 色, 和 布 局
- 调 试 程 序 的 纵 面 支 持―― 调 用 追 踪/ 定
时, 堆 栈 的 使 用 情 况, 垃 圾 图 式 等 等
- 源 代 码 控 制―― 这 是 一 个Java 较 为 弱 的
地 方( 版 本 控 制), 希 望 能 提 供 一 个 智 能
的 控 制 系 统, 能 够 注 意 到 什 么 时 候 约 定
已 经 改 变( 不 兼 容 的 类 改 变 了) 和 什 么 改
变 在 何 时 将 被 真 正 对 付。
总 结
JBuilder 工 具
非 常 容 易 进 入 日 渐 红 火 的IDE 市 场。 在 某 些
方 面, 它 表 现 出 了 非 常 卓 越 的 能 力―― 例
如JavaBean、 调 试、 多 项 目 管 理、 和 用 户 界 面
设 计。 尽 管 此 次JBuilder 的 推 出 是1.0 版 的 推
出, 但 是, 它 在 显 示 和IDE 定 制 上 还 略 显 粗
糙。 另 外,JBuilder 对Java 1.1 的 支 持 是 超 凡 脱 俗
的。 我 的 观 点 是, 作 为 第 一 次,Symantec 公 司
的 伙 计 们 将 会 感 觉 到, 他 们 的Visual Cafe Pro 产
品 将 面 对 一 个 非 常 强 大 的 对 手。
|