在示例的这一部分中,通过使用解析命令行参数和构造 CrnpClient 对象的主方法,创建名为 CrnpClient 的基本类。此对象将命令行参数传递给类,等待用户终止应用程序,对 CrnpClient 调用 shutdown 命令,然后退出。
CrnpClient 类的构造函数需要执行以下任务:
设置 XML 处理对象。
创建一个侦听事件回调的线程。
联系 CRNP 服务器并注册事件回调。
创建实现上述逻辑的 Java 代码。
以下实例显示了 CrnpClient 类的骨架代码。本章稍后将列出在构造函数和关闭方法中引用的四个帮助器方法的实现。请注意,将列出导入所需的所有软件包的代码。
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.w3c.dom.*;
import java.net.*;
import java.io.*;
import java.util.*;
class CrnpClient
{
public static void main(String []args)
{
InetAddress regIp = null;
int regPort = 0, localPort = 0;
try {
regIp = InetAddress.getByName(args[0]);
regPort = (new Integer(args[1])).intValue();
localPort = (new Integer(args[2])).intValue();
} catch (UnknownHostException e) {
System.out.println(e);
System.exit(1);
}
CrnpClient client = new CrnpClient(regIp, regPort,
localPort, args);
System.out.println("Hit return to terminate demo...");
try {
System.in.read();
} catch (IOException e) {
System.out.println(e.toString());
}
client.shutdown();
System.exit(0);
}
public CrnpClient(InetAddress regIpIn, int regPortIn,
int localPortIn, String []clArgs)
{
try {
regIp = regIpIn;
regPort = regPortIn;
localPort = localPortIn;
regs = clArgs;
setupXmlProcessing();
createEvtRecepThr();
registerCallbacks();
} catch (Exception e) {
System.out.println(e.toString());
System.exit(1);
}
}
public void shutdown()
{
try {
unregister();
} catch (Exception e) {
System.out.println(e);
System.exit(1);
}
}
private InetAddress regIp;
private int regPort;
private EventReceptionThread evtThr;
private String regs[];
public int localPort;
public DocumentBuilderFactory dbf;
}
本章稍后将详细说明成员变量。