2012-02-09 18 views
0

我正在尝试使用SMSLib从我的电脑向手机发送短信。我正在使用我的诺基亚5130 GSM手机发送消息,但无法使用。下面是我使用的代码。SMSLib中的javax.comm.PortInUseException

package sms; 
import org.smslib.AGateway; 
import org.smslib.IOutboundMessageNotification; 
import org.smslib.Library; 
import org.smslib.Message.MessageEncodings; 
import org.smslib.OutboundMessage; 
import org.smslib.Service; 
import org.smslib.modem.SerialModemGateway; 

public class SendMessage 
{ 
public void doIt() throws Exception { 
OutboundNotification outboundNotification = new OutboundNotification(); 
System.out.println("Example: Send message from a serial gsm modem."); 
System.out.println(Library.getLibraryDescription()); 
System.out.println("Version: " + Library.getLibraryVersion()); 
SerialModemGateway gateway = new SerialModemGateway("modem.com12", "COM12", 115200, "Nokia", "Nokia 5130 XPressMusic USB Modem"); 


gateway.setInbound(true); 
gateway.setOutbound(true); 
gateway.setSimPin("0000"); 

gateway.setSmscNumber("+919886005444"); 
Service.getInstance().setOutboundMessageNotification(outboundNotification); 
Service.getInstance().addGateway(gateway); 
Service.getInstance().startService(); 
System.out.println(); 
System.out.println("Modem Information:"); 
System.out.println(" Manufacturer: " + gateway.getManufacturer()); 
System.out.println(" Model: " + gateway.getModel()); 
System.out.println(" Serial No: " + gateway.getSerialNo()); 
System.out.println(" SIM IMSI: " + gateway.getImsi()); 
System.out.println(" Signal Level: " + gateway.getSignalLevel() + " dBm"); 
System.out.println(" Battery Level: " + gateway.getBatteryLevel() + "%"); 
System.out.println(); 
// Send a message synchronously. 
OutboundMessage msg = new OutboundMessage("+917829903913", "Sample msg"); 
msg.setEncoding(MessageEncodings.ENC7BIT); 
msg.setSrcPort(0); 
msg.setDstPort(66500); 
Service.getInstance().sendMessage(msg); 

System.out.println(msg); 

System.out.println("Now Sleeping - Hit <enter> to terminate."); 
System.in.read(); 
Service.getInstance().stopService(); 
} 

public class OutboundNotification implements IOutboundMessageNotification { 

public void process(AGateway gateway, OutboundMessage msg) { 
System.out.println("Outbound handler called from Gateway: " + gateway.getGatewayId()); 
System.out.println(msg); 
} 
} 

public static void main(String args[]) { 
SendMessage app = new SendMessage(); 
try { 
app.doIt(); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
} 

这里是我收到的错误消息。请帮忙,因为我对这些没有太多的知识。

run: 
Example: Send message from a serial gsm modem. 
SMSLib: A Java API library for sending and receiving SMS via a GSM modem or other supported gateways. 
This software is distributed under the terms of the Apache v2.0 License. 
Web Site: http://smslib.org 
Version: 3.5.1 
log4j:WARN No appenders could be found for logger (smslib). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
org.smslib.GatewayException: Comm library exception: java.lang.RuntimeException: javax.comm.PortInUseException: Port currently owned by Unknown Windows Application 
    at org.smslib.modem.SerialModemDriver.connectPort(SerialModemDriver.java:102) 
    at org.smslib.modem.AModemDriver.connect(AModemDriver.java:114) 
    at org.smslib.modem.ModemGateway.startGateway(ModemGateway.java:189) 
    at org.smslib.Service$1Starter.run(Service.java:276) 
BUILD SUCCESSFUL (total time: 6 seconds) 

回答

1

确保没有其他应用程序正在侦听COM12javax.comm.PortInUseException:发生是因为您的代码尝试注册COM12,这不可用。

将所有必需的jar和dll文件复制到正确的位置后,这应该可以工作。你还需要一个32位的JDK,所以你可能必须下载JDK的32位,如果你没有其他人,你会得到java.lang.UnsatisfiedLinkError:

我跑这个代码,它的工作原理。此外rememeber到setSmscNumber设为您的SIM卡提供商的模样,你仍然有默认的(例如,一个)

干杯 PB

1

还有就是在PC上的工作关系到你的手机(如诺基亚套件)的应用程序并在将手机连接到PC时与您的手机建立连接,确保您将关闭所有此类应用程序并使您的连接成为物理连接。

0

在我安装了32位Java版本后,它工作。还要确保你使用正确的端口。 com11在我的情况。

enter image description here