报错解释:
这条错误信息表明,在尝试从某个名为Deliver的队列中获取数据时,得到了一个NULL值。这通常发生在基于消息队列的服务(如GSM短信网关)中,服务尝试从预定的队列中获取下一条要传递的短信数据,但没有找到任何数据。是从依赖gsmpclient 3.1中抛出的
<dependency>
<groupId>com.wisentsoft</groupId>
<artifactId>gsmpclient</artifactId>
<version>3.1</version>
<scope>compile</scope>
</dependency>
解决方法:
检查GSM短信网关服务(可能是gsmpcPSrv)的配置,确保它已正确设置,并且指向正确的消息队列。
确认消息队列中确实有待传送的短信数据。如果没有,这可能不是一个问题。
检查短信网关服务的日志文件,以确定是否有其他相关错误或警告信息。
如果是程序代码问题,检查代码中负责从队列中获取数据的部分,确保逻辑正确,并且正确处理空队列的情况。
如果以上步骤都无法解决问题,可能需要重启GSM短信网关服务或者整个系统,以排除临时性的问题。
如果问题依然存在,可能需要联系软件供应商或者专业技术支持寻求帮助。
注:该错误会导致程序进入死循环,请谨慎(我用的是3.1版本,其它版本不知道)。
在com.wisentsoft.service.sms.gsmp.GsmpcPSrv.startDeliverThread()中发生死循环,如下所示:
private void startDeliverThread() {
if (this.isOldVersion) {
(new Thread() {
public void run() {
GsmpCPSrv.this.log4j.debug("DeliverThread started......");
while(true) {
while(GsmpCPSrv.this.started.get()) {
GsmpDeliver[] mos = GsmpCPSrv.this.getDelivers(10);
if (mos != null) {
GsmpDeliver[] var5 = mos;
int var4 = mos.length;
for(int var3 = 0; var3 < var4; ++var3) {
GsmpDeliver mo = var5[var3];
GsmpCPSrv.this.processDeliver(mo);
}
} else {
GsmpCPSrv.this.log4j.debug("Get NULL From Deliver Queue!!!");
try {
Thread.sleep(1000L);
} catch (InterruptedException var6) {
InterruptedException e = var6;
e.printStackTrace(); //此处未终止循环
}
}
}
return;
}
}
}).start();
}
}