`

SWT/JFace专题 --- SWT结构浅析

 
阅读更多
SWT技术是一套基于Java的第三方图形工具库。它的设计思想是提供一套通用的API,使得开发出的图形程序可以不加修改地在平台之间移植,而且在外观上和速度上与使用C/C++等语言在操作系统平台上开发出来的本地图形程序毫无差距,还可以使用鼠标拖放操作、系统托盘等高级的系统服务。

要实现本地化的效果,程序一定要与本地图形系统发生交互,在与操作系统交互时,SWT使用JNI技术。JNI(Java Native Interface)是以前sun公司为Java语言设计的用来与C/C++程序交互的技术。简单地说,可以将它理解成为将Java语言编写的接口和C语言编写的函数绑定,从而使得调用Java接口就等于调用C函数的技术。使用JNI,也可以在C代码中反向操作Java代码的内容,其工作方式如下:

Java代码:
--------------------------------------------
public static void main(String[] args){
......
method(...);
......
}

//用来声明JNI方法的接口,这个接口可以被其他Java代码调用
//
调用这个Java接口就等于调用下面的C函数
public static native int method(...);
--------------------------------------------
C代码:

//C代码负责JNI方法的具体实现,在这里可以调用操作系统API或执行其他C程序,也可以回调Java程序
JNIEXPORT jint JNICALL Java_JNI_method (JNIEnv *,jclass)....
--------------------------------------------

目前主流的图形平台都提供了C语言的API供开发者使用。出于性能的考虑,SWT并没有在操作系统的API上面再做封装,而是利用JNI将它们一对一地映射到Java平台上。这些JNI函数的访问权限都被限制在了SWT的包内部,外部程序只能通过SWT的API使用它们,不能直接调用。针对不同的图形平台,JNI接口也各不相同,SWT API的任务就是封装这些不同点。这些API将基本的图形操作进行抽象,并将不同的JNI调用封装在内部,从而以一致的接口呈现给使用者。使用SWT开发,主要就是操作这些API。

------------
SWT的基本体系结构共分为三层:
1)第一层是SWT的API。
外部开发者使用SWT时就是使用这些API编写SWT程序。这里包含了SWT的控件(文本框,按钮等)、事件处理(各种事件及监听器)等和图形界面开发者关系最为密切的部分;同时也只有这一部分的代码对外部开发者可见。底层C语言风格的API,在这一层上被封装为对象供外部开发者使用,但在封装的具体实现代码上,对于不同系统平台会有微小的差别。比如Win32平台的SWT在打开一个窗口时会针对WinCE和WindowsXP的特殊情况做不同的处理,而Linux GTK图形平台的SWT则没有这段代码。从整体上看,这部分代码在不同平台上基本相似。

2)第二层是JNI相关的代码。
每一个操作系统提供的API都拥有自己定义的一系列独特的数据类型作为参数类型及返回值。这一层的代码除了包含对应到C函数的Java接口外,还有这些特殊数据类型用Java实现。这一层的代码只在SWT内部可见,虽然也是Java编写,但其内容在每一种SWT版本中都是完全不同的。

3)第三层是使用C语言编写的操作系统本地动态链接库文件。
这些库文件将操作系统上和图形界面相关的C语言的API封装成Java可以调用的形式。这一层的代码全部是由C语言编写的,在Windows平台上编译成DLL文件,而在Linux平台上则编译为so文件。

在Windows XP上SWT调用操作系统API以创建一个窗口的函数调用过程如下。具体的创建窗口工作比下面显示的要略微复杂一些,还包括为窗口注册回调函数等其他内容,这里只列出了其中的部分核心流程。



(SWT的三层结构--SWT API;JNI Interface & Types;Native Library(DLL))

1)开发者通过调用SWT API创建一个窗口实例,并调用它的open方法:shell.open();
2)SWT API 呼叫OS.java中的CreateWindowEx函数以创建一个窗口:OS.createWindowEx
3)通过JNI映射,这个调用被翻译成对动态链接库中对应C函数的调用:OS_NATIVE("CreateWindowEx")
4)动态链接库中的函数调用Win32 API CreateWindowEx,完成窗口创建:Windows XP OS
  • 大小: 5.1 KB
分享到:
评论

相关推荐

    SWT/JFace专题 --- SWT/JFace概述

    在"SWT/JFace专题 --- SWT/JFace概述"中,可能涉及以下知识点: 1. SWT控件:包括Button、Text、Table、Tree、Composite等基本和复杂的控件,以及如何使用它们构建用户界面。 2. JFace数据绑定:讲解如何使用...

    swt/jface中文教程

    本教程将涵盖 SWT/JFace 的概览、目的、许可证和平台支持、SWT 和 JFace 的区别、使用 SWT/JFace 构建 GUI 应用程序、使用 SWT/JFace 管理颜色、绘图、字体、图案等内容。 SWT/JFace 的目的: SWT/JFace 的主要...

    swt/jface.jar

    标题中的"swt/jface.jar"是一个关键组件,它在Java开发环境中用于构建用户界面。SWT(Standard Widget Toolkit)是IBM开发的一个开源GUI库,它提供了与原生操作系统更紧密集成的图形用户界面控件。JFace是建立在SWT...

    SWT/Jface API 3.4

    SWT-JFace-3.4-API-.chm 文件很可能是 SWT 和 JFace API 的离线文档,包含了详细的类、方法和示例,是学习和开发过程中不可或缺的参考资料。通过深入学习这个 API 文档,开发者可以充分利用 SWT 和 JFace 的功能,...

    SWT/JFACE客户端登录窗口例子

    SWT (Standard Widget Toolkit) 和 JFace 是 Eclipse 开发框架中的两个重要组件,它们主要用于构建图形用户界面(GUI)。SWT 是一个底层的 GUI 工具包,它提供了与操作系统直接交互的能力,使得应用程序能够拥有原生...

    Eclipse SWT/JFace 核心应用 带书签

    Eclipse SWT/JFace 核心应用 带书签 Eclipse SWT/JFace

    SWT/JFace开发实例

    SWT/JFace开发实例

    SWT/JFace学习文档

    3.1 SWT/JFACE 的组件类结构图 组件类层次结构复杂,包括各种按钮、文本框、列表、树形视图等。这些组件都是通过继承自Control类的子类实现的。 3.1.1 Display 类简介 Display是所有SWT组件的顶级容器,它管理窗口...

    Eclipse SWT/JFace 核心应用光盘源码

    Eclipse SWT(Standard Widget Toolkit)和JFace是Java开发中用于构建图形用户界面(GUI)的库,尤其在开发Eclipse插件和RCP(Rich Client Platform)应用程序时非常重要。这两个库提供了丰富的组件和框架,使得...

    swt/jface in action +中文版+英文版+源码 下载

    SWT (Standard Widget Toolkit) 和 JFace 是两个与Java GUI编程密切相关的库,它们由Eclipse项目维护。本文将深入探讨这两个技术,并结合《SWT/JFace in Action》这本书的相关内容,提供一个全面的知识框架。 SWT是...

    eclipse swt/jface核心应用源码

    Eclipse SWT/JFace是Eclipse框架中的两个关键组件,它们为构建用户界面提供了强大的支持。SWT(Standard Widget Toolkit)是Eclipse的本机GUI库,而JFace是基于SWT构建的更高层次的抽象层,它简化了UI开发过程。 ...

    swt/jface实例开发

    【SWT/JFace实例开发】是一份针对Java GUI编程的学习资源,主要聚焦于SWT(Standard Widget Toolkit)和JFace这两个强大的图形用户界面库。SWT是Eclipse项目的一部分,它提供了一套与操作系统直接交互的原生控件,...

    Eclipse swt/jface核心应用源码(带视频)

    Eclipse SWT (Standard Widget Toolkit) 和 JFace 是两个在Java编程环境下用于构建图形用户界面(GUI)的重要库,尤其在开发Eclipse插件和RCP(Rich Client Platform)应用程序时非常常见。SWT是Eclipse项目的一个...

    SWT/JFace 3.5 API (HTML)

    5. 压缩包子文件的文件名称列表:"SWT-JFace-3.5-API-html",这个文件可能是压缩包内的主文件,包含了整个SWT和JFace 3.5版本的API文档。解压后,开发者可以通过打开这个HTML文件来访问完整的API指南。 在开发过程...

    SWT/JFace从入门到精通

    【SWT/JFace从入门到精通】 SWT(Standard Widget Toolkit)和JFace是Eclipse平台下用于构建图形用户界面(GUI)的两个关键库。它们为Java开发者提供了丰富的控件和高级UI功能,使创建桌面应用程序变得简单而强大。...

    Eclipse SWT JFace核心应用_pdf_含标签_目录

    《Eclipse SWT/Jface核心应用》全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的...

    swt/Jface中文教程

    - **理解SWT和JFace的架构与方法论**:为了更好地利用SWT和JFace,开发者需要深入了解这两个库的内部结构和设计理念。这有助于在实际开发过程中做出更合适的技术决策,提高应用程序的整体质量和性能。 - **GUI设计...

    SWT/JFace的核心应用与实战教程的PDF电子版.rar

    基于 Java 桌面程序开发的图形库...本书主要讲解了如何使用 SWT 和 JFace 进行应用程序的开发,通过本书系统而全面的 SWT/JFace 知识学习,将帮助读者快 速开发出完美、实用的 GUI 程序,轻松完成繁琐的界面、菜单编程.

    swt/jface api帮助文档

    在"SWT-JFace-3.4-API-.chm"这个帮助文档中,你会找到以下关键知识点: 1. **SWT组件**:包括各种基本和复杂控件,如Button、Label、Text、Shell、Composite等。每个控件都有其特定的属性、方法和事件。 2. **事件...

Global site tag (gtag.js) - Google Analytics