我现在有一个需求是利用java程序跟GSM MODEM短信猫结合来达到发短信的目的!在网上下载了些例子来看,把SMSlib相应的包导进工程,并把相应的文件也仿照要求放到相应的目录下,但一运行发短信程!序,就会报下面这个异常!
下面是我的发短信的源代码:
package test;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.smslib.AGateway;
import org.smslib.AGateway.Protocols;
import org.smslib.GatewayException;
import org.smslib.InboundMessage;
import org.smslib.Message.MessageEncodings;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;
public class SendSmsHandler {
private static final Logger logger = Logger.getLogger(SendSmsHandler.class);
private Service smsService;
/**
* 发送短信的类
*/
public SendSmsHandler() {
smsService = Service.getInstance(); //获得服务实例 单例模式的
List<AGateway> agatewayList = new ArrayList<AGateway>();
//String portName = "COM3";//"/dev/ttyUSB0";// COM24 //使用的端口号
SerialModemGateway gateway = new SerialModemGateway(
"modem.com3", "COM3", 9600, "wavecom", ""); //通过端口号频率名称等内容获得设备实例
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setProtocol(Protocols.PDU); //发送凡是PDU
gateway.setSimPin("0000");
agatewayList.add(gateway); //放到队列中,群发可以放多条就可以了
try {
for (AGateway gatewayTmp : agatewayList) {
smsService.addGateway(gatewayTmp);
}
} catch (GatewayException ex) {
logger.error(ex.getMessage());
}
}
/**
* 启动发送短信的服务
*/
public void start() {
logger.info("SMS service start.....");
try {
smsService.S.SERIAL_POLLING = true;
smsService.startService();
} catch (Exception ex) {
logger.error("SMS service start error:", ex);
}
}
/**
* 停止发送短信服务
*/
public void destroy() {
try {
smsService.stopService(); //停止服务
} catch (Exception ex) {
logger.error("SMS service stop error:", ex);
}
logger.info("SMS service stop");
}
/**
* send SMS
* 发送短信的方法
* @param msg 发送的内容
* @return Boolean 返回是否发送成功
*/
public Boolean sendSMS(OutboundMessage msg) {
try {
msg.setEncoding(MessageEncodings.ENCUCS2); //设置编码
return smsService.sendMessage(msg); //发送短信并返回结果
} catch (Exception e) {
logger.error("send error:", e);
}
return false;
}
//服务是否已经启动
private boolean isStarted() {
if (smsService.getServiceStatus() == Service.ServiceStatus.STARTED) { //服务的状态是否是启动
for (AGateway gateway : smsService.getGateways()) {
if (gateway.getStatus() == AGateway.GatewayStatuses.STARTED) {
return true;
}
}
}
return false;
}
/**
* read SMS 去读接收到的短信信息
* @return List
*/
public List<InboundMessage> readSMS() {
List<InboundMessage> msgList = new LinkedList<InboundMessage>();
if (!isStarted()) {
return msgList;
}
try {
this.smsService.readMessages(msgList,
InboundMessage.MessageClasses.ALL);
logger.info("read SMS size: " + msgList.size());
} catch (Exception e) {
logger.error("read error:", e);
}
return msgList;
}
/**
* @param args 测试类
*/
public static void main(String[] args) {
Logger.getRootLogger().setLevel(Level.INFO);
OutboundMessage outMsg = new OutboundMessage("1xxxxxxxxx7", "这是信息测试"); //绑定接收电话号码和发送的消息
SendSmsHandler smsHandler = new SendSmsHandler();
smsHandler.start(); //启动
//发送短信
smsHandler.sendSMS(outMsg);
//读取短信
List<InboundMessage> readList = smsHandler.readSMS();
for (InboundMessage in : readList) {
System.out.println("发信人:" + in.getOriginator() + " 短信内容:"
+ in.getText());
}
smsHandler.destroy(); //停止服务
System.out.println("-----------");
}
}
求大神解救啊!在线等。。。