oracle的环境配置-单独创建数据库实例
2015-02-25 14:48
381 查看
接着上一篇的介绍,本文重点介绍当我们向一个控件添加监听器的主要过程和相应源码解析。 本文以向一个Button按钮添加listener为例。详细介绍listener是如何存储的。 Button b = new Button(shell, SWT.CENTER); b.setText("I am Button"); b.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { System.out.println("widgetSelected------------"); } @Override public void widgetDefaultSelected(SelectionEvent e) { // TODO Auto-generated method stub System.out.println("widgetDefaultSelected----------"); } }); //Button类的addSelectionListener方法 public void addSelectionListener (SelectionListener listener) { checkWidget ();//检查当前控件的Display对象是否为空,当前线程是否为创建该控件的线程 //如果listener为空,抛出IllegalArgumentException异常 if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); //封装为SWT内部的TypedListener对象,用来区别有类型的listener和无类型的listener。 TypedListener typedListener = new TypedListener (listener); addListener (SWT.Selection,typedListener);//Widget的addListener方法 addListener (SWT.DefaultSelection,typedListener);//Widget的addListener方法 } //Widget的addListener方法 public void addListener (int eventType, Listener listener) { checkWidget (); if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); _addListener (eventType, listener); } ////Widget内部的_addListener方法,注意包访问权限,包外无法访问。 void _addListener (int eventType, Listener listener) { if (eventTable == null) eventTable = new EventTable (); eventTable.hook (eventType, listener); } //EventTable的hook方法 //EventTable使用数组存储listener类型和listener对象,GROW_SIZE为数组增量大小4 public void hook (int eventType, Listener listener) { if (types == null) types = new int [GROW_SIZE]; if (listeners == null) listeners = new Listener [GROW_SIZE]; int length = types.length, index = length - 1;//数组最后一个元素下标 //从后向前找到数组中最后一个非空位置,那么下一个位置为空 while (index >= 0) { if (types [index] != 0) break; --index; } //找到下一个空位置放入listener index++; //如果数组已满,对数组进行扩充,size+4 if (index == length) { int [] newTypes = new int [length + GROW_SIZE]; System.arraycopy (types, 0, newTypes, 0, length); types = newTypes; Listener [] newListeners = new Listener [length + GROW_SIZE]; System.arraycopy (listeners, 0, newListeners, 0, length); listeners = newListeners; } types [index] = eventType;//将listener加入数组中 listeners [index] = listener; }
总结:(1)对于数组的复制,建议使用System.arraycopy,当然二维数组的复制一定要小心,二维数组复制的是内部数组的引用。
一个详细讲解System.arraycopy的文章:http://xiaooman07.iteye.com/blog/451843
(2)SWT抛出异常的机制是通过错误代码(error code)找到对应的message字符串,将message封装为exception并抛出。
相关文章推荐
- Oracle安装配置、创建数据库实例及用户和连接
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
- Linux环境下手工创建Oracle 10g数据库
- Windows Mobile6.5开发(二)--配置环境,数据库访问,部署简单实例
- Oracle 实例创建和基础配置指南
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
- oracle创建类似配置数据库
- Oracle 数据库、用户名的创建、导入数据及服务器配置
- Windows Mobile6.5开发(二)--配置环境,数据库访问,部署简单实例
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
- Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
- 在UNIX环境下创建第二个数据库实例
- 数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
- Oracle 9i & 10g编程艺术-深入数据库体系结构——配置环境
- Oracle 多实例环境数据库的导入导出(imp exp)
- oracle10G 数据库名、实例名、ORACLE_SID 及创建数据库- hl3292转载修改
- Windows Mobile 6.5 配置环境,数据库访问,部署简单实例
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
- 在windows中搭建虚拟ASM环境创建Oracle 10G数据库
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库