1、第三方包的引用
a、工程项目增加Libraries
b、在工程下新建lib目录,把第三方包放到此目录
c、在打开plugin.xml,在Build标签页中,打开Extra Classpath Entries,添加jar
d、在Runtime标签页中,增加jar
e、在打包好的rcp程序中使用的Application.class是使用/plugins/插件名/插件.jar,所以,
在打包时,要新建一个'插件.jar',并把他的文件指向你的工程'src'目录
2、文件处理,绝对路径
a、在eclipse工具中运行rcp程序,默认的当前路径为c:/Document and Setting/window用户/下
b、rcp打包好之后,当前路径为启动程序的当前目录(安装目录)
c、开发时,把要读取的文件保存在当前目录(用户目录)
d、打包后,把要读取的文件放到安装目录
3、设置eclipse开发rcp程序的jre
可以在工程中选择jdk(工程->右键->properties->JRE System Library)
插件工程的jre使用本地安装的jre,可以指定运行时jre(java -jar startup.jar)
4、打包好的rcp程序,可以通过执行java -jar startup.jar来运行
不一定要用eclipse生成的可执行文件运行
运行的JRE可以通过指定java.exe文件来指定
5、串口开发包
a、串口开发使用sun公司的开发包comm2.0进行开发
b、comm2.0在sun的网站上找不到针对window的开发包
c、把comm.jar包放到jre(目标程序运新的虚拟机)目录的'lib/ext/'目录下
d、把javax.comm.properties文件放到jre(目标程序运新的虚拟机)目录的'lib'目录下
e、把win32com.dll文件放到jre(目标程序运新的虚拟机)目录的'bin'目录下
f、comm不支持mac操作系统,则使用开源的RTXT包。(在其他地方有说明)
6、editor编辑器问题
a、使用eclipse的向导生成的editor默认代码,没有设置site信息,要添加以下代码
public void init(IEditorSite site, IEditorInput input)
throws PartInitException {
// TODO Auto-generated method stub
setSite(site);
setInputWithNotify(input);
String filepath = input.getName();
setPartName(filepath);
setContentDescription(filepath);
}
b、构造一个空的输入时,当打开同一个编辑器时,会有多个相同的编辑器打开,是因为input自己比较时,return false
要自己构造一个输入,并对输入作比较
7、SWT控件
a、eclipse的SWT和sun公司的swing控件不能发到同一个面板中
b、eclipse的SWT控件宣布成final,是不能继承的
c、重写SWT控件,可以在普通的程序中使用,但在rcp中使用遇到一个问题,抛出字节验证错误
8、SWT的Dialog
a、swt的dialog是不能可视化开发的,要在dialog中放置一个composite,然后再composite中进行可视化开发
b、在打开dialog时,显示composite中的控件
9、串口开发(TC35)
a、SMS串口开发PDU格式,发送时,不是要把所有的pdu包都要给TE,只需要把短信中心号码后的数据发出
例如:0891 683108501505F0 11000B 81 3106656930F1 0000FF 0B E8329BFD06DDDF723619
发送指令为(java):
String = "AT+CMGS=23" + CR;//char cr = 13;回车符号
//等待'>'符号
String pud = "11000B813106656930F10000FF0BE8329BFD06DDDF723619" + ctrl_z;//char ctrl_z = 26;//结束符号
//成功应该会返回 +CMGS ack
b、UNICODE编码,java采用UNICODE编码,String.getBytes("UNICODE");返回四个字节的byte数据
例如:"中".getBytes("UNICODE"); "中"的UNICODE编码为'4E2D'
byte1 = -1;
byte2 = -2;
byte3 = 45;//十六进制2D=45(十进制)
byte4 = 78;//十六进制4E=78(十进制)
c、把UNICODE十六进制表示的字符串编码转换成字符串
String ucs2low = "2D";
String ucs2high = "4E";
byte[] bytes = new byte[4];
bytes[0] = -1;
bytes[1] = -2;
bytes[2] = (byte)Integer.parseInt(ucs2low, 16);
bytes[3] = (byte)Integer.parseInt(ucs2high, 16);
String charStr = new String(bytes,"UNICODE");