今天碰到一个问题,关于短消息发送的问题,问题表现是往短信网关写短信发送没问题,往手机写就正常,在手机上用程序发送反而没有问题,
经过测试,最后发现问题在这里。
在BlackBerry的button响应代码中,加入了短消息发送功能,结果就失败了
public void fieldChanged(Field field, int context) {
//Dialog.inform("ft");
if (field == loginButton) {
String contect = "XXX*xxxx";//客户端身份编码
String address = "sms://021xxxxxxx"; //短信网关
//Dialog.inform("start");
MessageConnection messageconnection = (MessageConnection)Connector.open(address,Connector.WRITE);
TextMessage textmessage = (TextMessage)messageconnection.newMessage(MessageConnection.TEXT_MESSAGE);
textmessage.setPayloadText(contect);
textmessage.setAddress(address);
messageconnection.send(textmessage);//异常从这里抛出
} catch (Throwable e) {
//Dialog.inform("exception");
System.err.println("execption");
e.printStackTrace();
}
Dialog.inform("good");
}
}
若是把它挪出到线程,就OK了。
public void fieldChanged(Field field, int context) {
//Dialog.inform("ft");
if (field == loginButton) {
MyThread mt1;
mt1 = new MyThread('A');
mt1.start();
Dialog.inform("good");
}
}
}
class MyThread extends Thread {
boolean exit = false;
char printchar;
public MyThread(char c) {
printchar = c;
}
public void run() {
try {
} catch (Throwable e) {
//Dialog.inform("exception");
System.err.println("execption");
e.printStackTrace();
}
}
}
报错的异常很好,能很容易看出问题,你得佩服BB这套Event驱动的应用框架,也可以更好体会UI编程中的一些好的习惯,不要把容易IO失败或者比较费用资源的操作放到BB中来。
异常如下:
guid:0x9C3CD62E3320B498 time: Thu Jun 17 17:09:03 2010 severity:1 type:3 app:Java Exception data:
RuntimeException
blocking operation not permitted on event dispatch thread
net_rim_cldc-19(4BAE2663)
EventThreadCheck
throwException
0x1F87
net_rim_cldc-18(4BAE2663)
NativeTransport
send
0x76D1
net_rim_cldc-19(4BAE2663)
Transport
send
0x9266
net_rim_cldc-19(4BAE2663)
Protocol
send
0x3702
Smsfor8910(4C19EC08)
Smsfor8910RIMResources
<clinit>
0x114
net_rim_cldc-11(4BAE2663)
Field
fieldChangeNotify
0xBCD
net_rim_cldc-14(4BAE2663)
ButtonField
<private>
0x270C
net_rim_cldc-14(4BAE2663)
ButtonField
trackwheelUnclick
0x22E0
net_rim_cldc-12(4BAE2663)
Manager
trackwheelUnclick
0x249D
net_rim_cldc-12(4BAE2663)
Manager
trackwheelUnclick
0x249D
net_rim_cldc-12(4BAE2663)
Screen
trackwheelUnclick
0x9693
net_rim_cldc-12(4BAE2663)
Screen
dispatchNavigationEvent
0x71CD
net_rim_cldc-13(4BAE2663)
UiEngineImpl
processMessage
0x7964
net_rim_cldc-8(4BAE2663)
Application
<private>
0x29A4
net_rim_cldc-8(4BAE2663)
Application
processNextMessage
0x1ADD
net_rim_cldc-8(4BAE2663)
Application
enterEventDispatcher
0x1A1A
Smsfor8910(4C19EC08)
MyThread
run
0x9A
String contect = "XXX*xxxx";//客户端身份编码
String address = "sms://021xxxxxxx"; //短信网关
//Dialog.inform("start");
MessageConnection messageconnection = (MessageConnection)Connector.open(address,Connector.WRITE);
TextMessage textmessage = (TextMessage)messageconnection.newMessage(MessageConnection.TEXT_MESSAGE);
textmessage.setPayloadText(contect);
textmessage.setAddress(address);
messageconnection.send(textmessage);//异常从这里抛出