简介:您能编写跨多种平台编译、同时执行速度仍然像本机代码一样快的 Java 代码吗?这是一个困扰 Java 开发人员的难题,对于具有复杂 UI 的应用 程序来说尤为如此。在本文中,开发人员 Vladimir Silva 建议了一种针对这个 难题的有趣解决方案。您将学习如何使用 JNI 来访问 SLIK,后者是一个跨平台 的 C API,它同时在 Windows 和 UNIX 上提供本机性能。
相对于诸如 C 和 C++ 这样的传统语言,Java 语言已主宰了中间层开发。 Java 语言在开发社区得到普遍接受的原因是它的面向对象设计、平台无关性, 以及丰富的支持 API。然而,它在设法将桌面作为一个真正的开发平台方面却很 失败——或许这是由于使得它主宰中间层的相同原因吧。平台无关性意味着相对 于本机 C 和 C++ 应用程序来说,性能会大大降低。
本文的目的是展示 Java 与简单皮肤接口(Simplistic Skin Interface,也 称为 SLIK)的绑定(请参阅 参考资料,获取更多细节)。SLIK 是一个可用于 构建跨平台 GUI 的 C API。通过使用 Java 本机接口(Java Native Interface ,JNI),您可以将 Java 代码绑定到 SLIK,从而设计出像 C 和 C++ 一样执行 的跨平台用户界面。
Java 语言和 C:动感二重唱
Java 技术支持与多种语言绑定,包括 C/C++、Fortran,等等。这一卓越特 性为开发人员带来了无比的灵活性,允许他们编写需要某些操作系统相关功能的 API。
为了证明 SLIK 的高级用户界面功能,我将展示如何构建一个没有矩形窗口 的 UI(也称为 皮肤或 带皮肤的窗口),它需要 Java 语言当前所没有提供的 低级 API。Java 所提供的是使用 JNI 访问任何操作系统相关服务的手段。在本 机端,C 是最佳的语言选择,而我将使用的 SLIK 的修改版本提供了实现本文目 标的多平台 C API。
关于 JNI 的详细介绍超出了本文的范围;欲了解关于该主题的更多信息,请 参考下面的 参考资料小节。务必要牢记的一件重要事情是,SLIK 是用 C 编写 的,并且您需要 JNI 来从用 Java 语言编写的代码中访问它。
SLIK 概述
SLIK 是一个 C API,用于构建基于 WinAmp 风格的皮肤的高级用户界面。此 类界面的例子包括像用于类 UNIX 系统的流行的 XMMS(X-Multimedia System, X-多媒体系统)和 XINE CD/DVD 播放器这样的音频和视频播放器。 使用这个 API 作为 GUI 的基础具有许多好处:
SLIK 包括一组增强的小部件,比如按钮、菜单、窗口、列表,以及当前的窗 口工具包所没有提供的高分辨率图像。
该 API 可用于多平台设计,因为它的核心库可同时在 Microsoft Windows 和类 UNIX 系统下编译。
SLIK 可以实现为一个 Windows DLL 或 UNIX 共享对象库,这意味着它可以 跨多个应用程序重用,并且易于维护。
SLIK 软件由 GQmpeg 小组在 GNU 公共许可证(GNU Public License,GPL) 之下提供。GQmpeg 小组提供的 SLIK 版本仅在类 UNIX 系统上作为可执行文件 来编译。我创建了一个修改后的版本,它可以同时工作在 Win32 和 UNIX 系统 上;这个版本以二进制的形式随本文的源代码一起提供(同时包括 Windows DLL 和 UNIX 共享对象或 SO 版本)。
我还同时提供了用于 UNIX 和 Windows 环境的 makefile。