如何使用 LumaQQ 核心 API
如何使用 LumaQQ 核心 API
第2部分:处理QQ事件
摘要
在第1部分中,我向你演示了一个最简单的QQ程序,在那个程序里,我使用了Thread.sleep()这样的方式来等待操作的完成,显然这种方式只能拿来做演示,在本部分中,我会更进一步,为你介绍LumaQQ中的事件处理方法,并且会实现一个LumaQQ Applet,于是你在网页里面也可以使用LumaQQ了。Luma,清华大学
更新时间:2005/03/13
概述
第1步:创建Applet子类
public class Demo2 extends JApplet implements IQQListener { ... }
图1. Applet界面
第2步:为按钮加上监听器
btnSend.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {send();} });
protected void send() {// 得到所有参数int yourQQ = 0;try {yourQQ = Integer.parseInt(textQQ.getText());friendQQ = Integer.parseInt(textFriendQQ.getText());} catch (NumberFormatException e) {lblHint.setText("The format of QQ number is invalid.");return;} String yourPassword = textPassword.getText();// 开始创建各种对象,登录,然后发送消息,登出,注意我们不再使用sleep来等待操作完成// 创建QQClient和QQUserclient = new QQClient();QQUser user = new QQUser(yourQQ, yourPassword);// 把自己添加成为IQQListenerclient.addIQQListener(this);// 设置参数user.setUdp(true);client.setUser(user);client.setLoginServer("sz.tencent.com");client.setAutoGetFriend(false);try {// 登录lblHint.setText("Logining...");client.login();} catch (Exception e1) {e1.printStackTrace();} }
第3步:实现IQQListener
public void qqEvent(QQEvent e) {switch(e.type) {case QQEvent.QQ_LOGIN_SUCCESS:processLoginSuccess();break;} }
private void processLoginSuccess() {if(!client.getUser().isLoggedIn()) {lblHint.setText("Login successful, wait for status changed..."); } }
图2. 登录成功后的提示信息
public void qqEvent(QQEvent e) {switch(e.type) {case QQEvent.QQ_LOGIN_SUCCESS:processLoginSuccess();break;case QQEvent.QQ_CHANGE_STATUS_SUCCESS:processChangeStatusSuccess();break;} }
private void processChangeStatusSuccess() {lblHint.setText("Status changes successful, begin sending message...");client.sendMessage(textMessage.getText(), friendQQ, "宋体"); }
public void qqEvent(QQEvent e) {switch(e.type) {case QQEvent.QQ_LOGIN_SUCCESS:processLoginSuccess();break;case QQEvent.QQ_SEND_IM_SUCCESS:processSendIMSuccess();break;case QQEvent.QQ_CHANGE_STATUS_SUCCESS:processChangeStatusSuccess();break;} }
private void processSendIMSuccess() {lblHint.setText("Message is sent successfully, client now logout.");client.logout(); }
第4步:差错处理
public void qqEvent(QQEvent e) {switch(e.type) {case QQEvent.QQ_LOGIN_SUCCESS:processLoginSuccess();break;case QQEvent.QQ_LOGIN_PASSWROD_ERROR:processLoginPasswordError();break;case QQEvent.QQ_LOGIN_UNKNOWN_ERROR:processLoginUnknownError();break;case QQEvent.QQ_SEND_IM_SUCCESS:processSendIMSuccess();break;case QQEvent.QQ_CHANGE_STATUS_SUCCESS:processChangeStatusSuccess();break;case QQEvent.QQ_CHANGE_STATUS_FAIL:processChangeStatusFail();break;case QQEvent.QQ_OPERATION_TIMEOUT:if(e.operation == QQ.QQ_CMD_SEND_IM)processSendIMFail();break;} }
private void processLoginPasswordError() {lblHint.setText("Password error, login failed!"); } private void processLoginUnknownError() {lblHint.setText("Unknown error, login failed!"); } private void processChangeStatusFail() {lblHint.setText("Failed to change status, message can't be sent, client is logout");client.logout(); } private void processSendIMFail() {lblHint.setText("Failed to send message, client now logout.");client.logout(); }
总结
如何使用 LumaQQ 核心 API相关推荐
- hibernate教程--常用配置和核心API详解
一.Hibernate的常用的配置及核心API. 1.1 Hibernate的常见配置: 1.1.1.核心配置: 核心配置有两种方式进行配置: 1)属性文件的配置: * hibernate.prop ...
- hibernate教程--常用配置和核心API
一.Hibernate的常用的配置及核心API. 1.1Hibernate的常见配置: 1.1.1.核心配置: 核心配置有两种方式进行配置: 1)属性文件的配置: * hibernate.proper ...
- hibernate框架学习第二天:核心API、工具类、事务、查询、方言、主键生成策略等...
核心API Configuration 描述的是一个封装所有配置信息的对象 1.加载hibernate.properties(非主流,早期) Configuration conf = new Conf ...
- EXT核心API详解(二)-Array/Date/Function/Number/String
EXT核心API详解(二)-Array/Date/Function/Number/String Array类 indexOf( Object o ) Number object是否在数组中,找不到返 ...
- 核心API最佳实践——JDK日志分级
核心API最佳实践--JDK日志分级 时间:2005-10-29 08:00 来源:网管之家bitsCN.com 字体:[大 中 小] 日志(Log)是什么?字典对其的解释是"对某种机器工作 ...
- Java核心API需要掌握的程度
Java的核心API是非常庞大的,这给开发者来说带来了很大的方便,经常人有评论,java让程序员变傻. 但是一些内容我认为是必须掌握的,否则不可以熟练运用java,也不会使用就很难办了. 1.java ...
- JavaEE基础(02):Servlet核心API用法详解
本文源码:GitHub·点这里 || GitEE·点这里 一.核心API简介 1.Servlet执行流程 Servlet是JavaWeb的三大组件之一(Servlet.Filter.Listener) ...
- Spring Security系列教程11--Spring Security核心API讲解
前言 经过前面几个章节的学习,一一哥 带大家实现了基于内存和数据库模型的认证与授权,尤其是基于自定义的数据库模型更是可以帮助我们进行灵活开发.但是前面章节的内容,属于让我们达到了 "会用&q ...
- Spring Security系列教程-Spring Security核心API讲解
前言 经过前面几个章节的学习,一一哥 带大家实现了基于内存和数据库模型的认证与授权,尤其是基于自定义的数据库模型更是可以帮助我们进行灵活开发.但是前面章节的内容,属于让我们达到了 "会用&q ...
- Activiti6.0 (三)核心API
核心API RepositoryService: 负责对流程定义文件的管理,操作一些静态文件(流程xml.流程图片),获取部署对象和资源对象 RunTimeService: 对流程进行控制,可用于启动 ...
最新文章
- 【数论基础】模运算详解及其应用
- Linux内存管理 (26)内存相关工具
- 【编译原理】递归下降的预测分析(真の能看懂~!)
- zuul过滤器执行生命周期
- ipv6转换成ipv4_IPv6协议及其安全浅析
- python的pow(-2,3,5)=?
- Ubuntu12.04 配置JDK7
- Jenkins+CCNET的另类部署图
- vim复制,粘贴,删除,撤销,替换,光标移动等用法
- 初识STM32之选型
- 【小工具】仿站小工具的使用及下载
- iPhone 快捷指令 文本朗读
- 解决阿里云oss 图片跨域问题
- Windows server 2008 r2 基于LLS的Web和FTP服务搭建(基本)
- 车载导航蓝牙知识介绍
- 数据在云服务器中的安全性不会降低的原因
- Kubernetes(k8s)四、Pod生命周期(初始化容器的应用,探针liveness、readliness应用,)
- 如何识别手写汉字?跟着步骤就能完成
- 英伟达RTX 4070 Ti显卡正式发布!你会买吗?
- Golang interface 接口详细原理和使用技巧