java响应机制 监听器ToolBarListener

java响应机制 监听器ToolBarListener,第1张

设计一个独立的监听器类ToolBarListener ,实现接口ActionListener ,重写actionPerformed方法。

getSource()方法是指从哪个组件发出的事件源。

通过ActionEvent.getSource()获取事件是哪个按钮发出来的,根据不同的按钮,发出切换不同的功能面板。

1.创建监听器把所有按钮的监听器都整合到一起方便维护:

2.实例化一个ToolBarListener 监听器,工具栏上的按钮,都加上这么一个监听器对象即可。(从 addListener()开始)

本地服务名(Tnsname)

Oracle客户端与服务器端的连接是通过客户端发出连接请求 由服务器端监听器对客户端连接请求进行合法检查 如果连接请求有效 则进行连接 否则拒绝该连接

本地服务名是Oracle客户端网络配置的一种 另外还有Oracle名字服务器(Oracle Names Server)等 Oracle常用的客户端配置就是采用的本地服务名 本文中介绍的也主要是基于本地服务名的配置

Oracle网络连接配置方法

配 置Oracle服务器端与客户端都可以在其自带的图形化Oracle网络管理器(Oracle Net Manager)里完成(强烈建议在这个图形化的工具下完成Oracle服务端或客户端的配置) 在Windows下 点击 开始/程序/Oracle OraHome /Configuration and Migration Tools/Net Manager 启动Oracle网络管理器工具 在Linux/Unix下 利用netmgr命令来启动图形化Oracle网络管理器 如 $ netmgr

Oracle监听器配置(LISTENER):

选中树形目录中监听程序项 再点击左上侧 + 按钮添加监听程序 点击监听程序目录 默认新加的监听器名称是LISTENER(该名称也可以 由任意合法字符命名) 选中该名称 选中窗口右侧栏下拉选项中的 监听位置 点击添加地址按钮 在出现的网络地址栏的协议下拉选项中选中 TCP/IP 主机文本框中输入主机名称或IP地址(如果主机即用作服务端也作为客户端 输入两项之一均有效如果主机作为服务端并需要通过网络连 接 建议输入IP地址) 端口文本框中输入数字端口 默认是 也可以自定义任意有效数字端口

选 中窗口右侧栏下拉选项中的 数据库服务 点击添加数据库按钮 在出现的数据库栏中输入全局数据库名 如myoracle 注意这里的全局数据库名与数据 库SID有所区别 全局数据库名实际通过域名来控制在同一网段内数据库全局命名的唯一性 就如Windows下的域名控制器 如这里可以输入 myoracle Oracle主目录可以不填写 输入SID 如myoracle

保存以上配置 默认即可在Oracle安装目录下找到监听配置文件 (Windows下如D:\oracle\ora \neork\admin\listener ora Linux/Unix下$ ORACLE_HOME/neork/admin/listerer ora) 至此 Oracle服务端监听器配置已经完成

本地服务名配置(Tnsnames):

本地服务名是基于Oracle客户端的网络配置 所以 如果客户端需要连接数据库服务器进行 *** 作 则需要配置该客户端 其依附对象可以是任意一台欲连接数据 库服务器进行 *** 作的PC机 也可以是数据库服务器自身 如前面所介绍 可以利用Oracle自带的图形化管理工具Net Manager来完成Oracle客户端的配置

如果数据库服务器端相关服务启动了 可以点击测试按钮进行连接测试 Oracle默认是通过scott/tiger用户进行测试连接 由于scott用户是 Oracle自带的示例用户 对于正式的业务数据库或专业测试数据库可能没有配置这个用户 所以需要更改成有效的用户登录才可能测试成功 如果这里测试连 接不成功 也不要紧 先点完成按钮结束配置

回到Oracle网络管理器(Oracle Net Manager)主窗口 保存配置 默认即可在Oracle安装目录下找到本地服务名配置文件 (Windows下如D:\oracle\ora \neork\admin\tnsnames ora Linux/Unix下$ ORACLE_HOME/neork/admin/ tnsnames ora)

树形目录下的服务命名可以通过编辑菜单里的重命名菜单更改成任意合法字符组成的服务名称 注意服务名称前不能有空格字符 否则可能无法连接数据库服务器

连接数据库服务器:

( )启动服务器端监听器与数据库服务:

Linux/Unix下 启动监听器 $ lsnrctl start

· 关闭监听器 $ lsnrctl stop

· 查看监听状态 $ lsnrctl status

SQL>conn sys@myoracle as sysdba 这里的myoracle是前面配置的客户端本地服务名

SQL>conn / as sysdba

SQL>startup

Windows下 启动监听器 C:\lsnrctl start

启动Oracle实例服务 C:\oradim –startup –sid myoracle

关闭Oracle实例服务 C:\oradim –shutdown –sid myoracle

以上服务必须同时启动 客户端才能连接数据库 由于默认配置的监听器名称是Listener 上述命令可以正常启动监听器 如果监听器名称是其它名称 如aListener 则需要用下列方式才能启动

Linux/Unix下 $ lsnrctl start aListener

Windows下 C:\lsnrctl start aListener

( )测试连接数据库服务器

测试的方法多种多样 可以在上面配置本地服务名时进行测试 也可以是第三方客户端工具 如PL/SQL Developer 最方便的是用Oracle自带的SQLplus工具 以下利用SQLplus进行测试

C:\sqlplus /nolog

SQL>conn zgh@myoracle

已连接

客户端连接服务器端常见问题排除方法

要排除客户端与服务器端的连接问题 首先检查客户端配置是否正确(客户端配置必须与数据库服务器端监听配置一致) 再根据错误提示解决 下面列出几种常见的连接问题

ORA : TNS: 没有监听器

显而易见 服务器端的监听器没有启动 另外检查客户端IP地址或端口填写是否正确 启动监听器

$ lsnrctl start或C:\lsnrctl start

ORA : TNS: 监听程序无法启动专用服务器进程

对于Windows而言 没有启动Oracle实例服务 启动实例服务 C:\oradim –startup sid myoracle

ORA : TNS: *** 作超时

出现这个问题的原因很多 但主要跟网络有关 解决这个问题 首先检查客户端与服务端的网络是否畅通 如果网络连通 则检查两端的防火墙是否阻挡了连接

ORA : TNS: 无法处理服务名

检 查输入的服务名与配置的服务名是否一致 另外注意生成的本地服务名文件(Windows下如D:\oracle\ora \neork\admin \tnsnames ora Linux/Unix下$ORACLE_HOME/neork/admin/tnsnames ora)里每项服务的首 行服务名称前不能有空格

ORA : TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME打开Net Manager 选中服务名称 检查服务标识栏里的服务名输入是否正确 该服务名必须与服务器端监听器配置的全局数据库名一致

Windows下启动监听服务提示找不到路径

用 命令或在服务窗口中启动监听提示找不到路径 或监听服务启动异常 打开注册表 进入HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome TNSListener项 查看ImagePath字符串项是否存在 如果没 有 设定值为D:\oracle\ora \BIN\TNSLSNR 不同的安装路径设定值做相应的更改 这种方法同样适用于Oracle实例服务 同上 找到如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE项 查看ImagePath字符串项是否存在 如果没有 则新建 设定值为d:\oracle\ora \ binORACLE EXE MYORACLE

lishixinzhi/Article/program/Oracle/201311/18881

require 函数用来在一个模块中引入另外一个模块。传入一个模块名,返回一个模块导出对象。用法: let cc = require("模块名") ,其中模块名可以用绝对路径也可以用相对路径,模块的后缀名.js可以省略。例如:

require()函数用两个作用:

exports 对象用来导出当前模块的公共方法或属性,别的模块通过 require 函数使用当前模块时得到的就是当前模块的 exports 对象。用法: exports.name ,name为导出的对象名。例子:

module.exports 用来导出一个默认对象,没有指定对象名,常见于修改模块的原始导出对象。比如原本模块导出的是一个对象,我们可以通过module.exports修改为导出一个函数。如下:

3.加载第三方包

Node.js中使用 CommonJs 模块化机制,通过 npm 下载的第三方包,我们在项目中引入第三方包都是: let xx = require('第三方包名') ,究竟 require 方法加载第三方包的原理机制是什么,今天我们来探讨下。

require('第三方包名') 优先在加载该包的模块的同级目录 node_modules 中查找第三方包。

找到该第三方包中的 package.json 文件,并且找到里面的 main 属性对应的入口模块,该入口模块即为加载的第三方模块。

如果在要加载的第三方包中没有找到 package.json 文件或者是 package.json 文件中没有 main 属性,则默认加载第三方包中的 index.js 文件。

如果在加载第三方模块的文件的同级目录没有找到 node_modules 文件夹,或者以上所有情况都没有找到,则会向上一级父级目录下查找 node_modules 文件夹,查找规则如上一致。

如果一直找到该模块的磁盘根路径都没有找到,则会报错: can not find module xxx 。

4.npm命令

npm 英文全称: node package manager ,npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门。它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(package) (即,代码模块)。来自各大洲的开源软件开发者使用 npm 互相分享和借鉴。包的结构使您能够轻松跟踪依赖项和版本。我们平时开发项目都是需要使用npm下载依赖,常见的npm命令总结如下:

5.文件读取

var fs = require('fs')

同步:

var content = fs.readFileSync('hello.txt',{flag:'r',encoding:"utf-8"})

异步(默认):

flag:读取模式

encoding:编码格式

7.文件写入

var fs = require('fs')

格式:write=>w read=>r append =>a

异步:

8.文件删除

fs . unlink ( 'lc.txt' , function (){

9.buffer缓冲区

1、数组不能进行二进制数据的 *** 作2、js数组不像java、python等语言效率高3、buffer内存空间开辟出固定大小的内存

let buf1 = Buffer.alloc(10)

console.log(buf1)

allocUnsafe(之前的一些内容)(效率高)

10.文件目录

var fs = require('fs')

fs.readdir(path,callback)

导入 readline 包

let readline = require('readline')

实例化接口对象(process对象,stdout/in输入输出)

question方法 提问

close 事件监听

11.文件流

var fs = require('fs')

语法: fs.createWriteStream(文件路径,【可选的配置 *** 作】)

let ws = fs.createWriteStream("hello.txt",{flags:"w",encoding:"utf-8"})

let ws = fs.createWriteStream("hello.txt",{flags:"w",encoding:"utf-8"})

实践

fs.createReadStream(路径,【可选的配置项】)

文档

let rs = fs.createReadStream('hello.txt',{flags:'r',encoding:"utf-8"})

音乐

let rs = fs.createReadStream('snake.mp4',{flags:'r'})

读取时写入

let ws = fs.createWriteStream('a.txt',{flags:"w",encoding:"utf-8"})

createReadStream.pipe(createWriteStream)

链式是通过连接输出流到另外一个流并创建多个流 *** 作链的机制。链式流一般用于管道 *** 作。

接下来我们就是用管道和链式来压缩和解压文件。

创建 compress.js 文件, 代码如下:

代码执行结果如下:

执行完以上 *** 作后,我们可以看到当前目录下生成了 input.txt 的压缩文件 input.txt.gz。

接下来,让我们来解压该文件,创建 decompress.js 文件,代码如下:

12.node事件

Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

Node.js 几乎每一个 API 都是支持回调函数的。

Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。

Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

没有使用 events 包 仅使用JavaScript事件监听进行事件驱动

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。

当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

这个模型非常高效可扩展性非常强,因为 webserver 一直接受请求而不等待任何读写 *** 作。(这也称之为非阻塞式IO或者事件驱动IO)

在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下实例:

以下程序绑定事件处理程序:

我们可以通过程序触发事件:

接下来让我们执行以上代码:

在 Node 应用程序中,执行异步 *** 作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数。

接下来让我们来重新看下前面的实例,创建一个 input.txt ,文件内容如下:

创建 main.js 文件,代码如下:

以上程序中 fs.readFile() 是异步函数用于读取文件。如果在读取文件过程中发生错误,错误 err 对象就会输出错误信息。

如果没发生错误,readFile 跳过 err 对象的输出,文件内容就通过回调函数输出。

执行以上代码,执行结果如下:

接下来我们删除 input.txt 文件,执行结果如下所示:

因为文件 input.txt 不存在,所以输出了错误信息。

Node.js 所有的异步 I/O *** 作在完成时都会发送一个事件到事件队列。

Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.readStream 对象会在文件被打开的时候触发一个事件。所有这些产生事件的对象都是 events.EventEmitter 的实例。

events 模块只提供了一个对象:events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。

你可以通过require("events")来访问该模块。

EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。

下面我们用一个简单的例子说明 EventEmitter 的用法:

执行结果如下:

运行这段代码,1 秒后控制台输出了 'some_event 事件触发' 。其原理是 event 对象注册了事件 some_event 的一个监听器,然后我们通过 setTimeout 在 1000 毫秒以后向 event 对象发送事件 some_event,此时会调用some_event 的监听器。

EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。

当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。

让我们以下面的例子解释这个过程:

执行以上代码,运行的结果如下:

以上例子中,emitter 为事件 someEvent 注册了两个事件监听器,然后触发了 someEvent 事件。

运行结果中可以看到两个事件监听器回调函数被先后调用。这就是EventEmitter最简单的用法。

EventEmitter 提供了多个属性,如 on emit on 函数用于绑定事件函数, emit 属性用于触发一个事件。接下来我们来具体看下 EventEmitter 的属性介绍。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11946751.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存