2013-10-09 1 views
0

Я установил lib smslib для моего проекта для отправки примера сообщения в lib smslib-v3.5.3. Я следил за всеми инструкциями на сайте smslib.org для установки lib. Но я нашел ошибку.Java для smslib: ошибка построения для отправки сообщения с использованием smslib

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.com9", "COM9",     9600, "InterCEL", ""); 
    gateway.setInbound(true); 
    gateway.setOutbound(true); 
    gateway.setSimPin("0000"); 
    gateway.setSmscNumber("+84920210006"); 
    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(); 
    OutboundMessage msg = new OutboundMessage("0987623500", "Hello"); 
    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) 
    { 
    } 
} 

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

}

ошибка:

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 org.smslib 
    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:277) 

пожалуйста, помогите мне немного. большое спасибо

ответ

0

Прошло много лет с тех пор, как я использовал JavaCOM, но здесь есть приложение для тестирования ListPorts. Посмотрите, можете ли вы видеть какие-либо устройства в виртуальных COM-портах. Мои сообщения для отправки SMS + получают приложения smslib-3.4.0.jar с библиотеками rxtx.

Я всегда использовал файлы RXTX .jar + .dll/.so в Linux и Windows. Найденные некоторые устройства + ОС не работали корректно с стандартной библиотекой DLL JavaCOM.
http://rxtx.qbang.org/wiki/index.php/Download

Файлы, которые будут использоваться
ListPorts.bat
Библиотека/MyApp.jar (или использовать ./classes)
пути к классам Lib/librxtxSerial.so
Библиотека/logging.properties
Lib /RXTXcomm.jar
Lib/rxtxSerial.dll (32bit, никогда не использовали 64-разрядные Lib)

Lib/logging.properties

############################################################ 
# Default Logging Configuration File 
# 
# You can use a different file by specifying a filename 
# with the java.util.logging.config.file system property. 
# For example java -Djava.util.logging.config.file=myfile 
############################################################ 

############################################################ 
# Global properties 
############################################################ 

# "handlers" specifies a comma separated list of log Handler 
# classes. These handlers will be installed during VM startup. 
# Note that these classes must be on the system classpath. 
# By default we only configure a ConsoleHandler, which will only 
# show messages at the INFO and above levels. 
handlers= java.util.logging.ConsoleHandler 
##handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler 

# Default global logging level. 
# This specifies which kinds of events are logged across 
# all loggers. For any given facility this global level 
# can be overriden by a facility specific level 
# Note that the ConsoleHandler also has a separate level 
# setting to limit messages printed to the console. 
.level= ALL 

############################################################ 
# Handler specific properties. 
# Describes specific configuration info for Handlers. 
############################################################ 

# default file output is in user's home directory. 
##java.util.logging.FileHandler.pattern = %h/java%u.log 
java.util.logging.FileHandler.pattern = logjava.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 1 
##java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = ALL 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 


############################################################ 
# Facility specific properties. 
# Provides extra control for each logger. 
# INFO, FINER, FINEST, ALL 
############################################################ 

# For example, set the com.xyz.foo logger to only log SEVERE 
# messages: 
org.smslib.level = ALL 
#org.ajwcc.level = ALL 

ListPorts.bat

set cp=./lib/myapp.jar;./lib/RXTXcomm.jar 
set lib=./lib 
java.exe -cp %cp% -Djava.library.path=%lib% -Djava.util.logging.config.file=%lib%/logging.properties com.myapp.ListPorts 
pause 

SRC/COM/MyApp/ListPorts.java

package com.myapp.ListPorts 

//import javax.comm.*; // You my try using this, it might work as well 
import gnu.io.*; // RXTX com replacement 
import java.util.Enumeration; 

public class ListPorts { 

    @SuppressWarnings("unchecked") 
    public static void main(String args[]) throws Exception { 
     // List portNames 
     Enumeration<CommPortIdentifier> ports = CommPortIdentifier.getPortIdentifiers(); 
     while (ports.hasMoreElements()) { 
      CommPortIdentifier portId = ports.nextElement(); 
      String s = getPortInfo(portId); 
      System.out.println(s); 
     } 

     // test open-close methods on each port 
     ports = CommPortIdentifier.getPortIdentifiers(); 
     while (ports.hasMoreElements()) { 
      CommPortIdentifier portId = (CommPortIdentifier)ports.nextElement(); 
      CommPort port = null; 
      try { 
       System.out.print("open " + portId.getName()); 
       port = portId.open(ListPorts.class.getName(), 2000); 
       port.close(); 
       System.out.println("...closed");     
      } catch (Exception ex) { 
       ex.printStackTrace(); 
       if (port != null) 
        try { port.close(); } catch (Exception e) { } 
      } 
     } 
    } 

    private static String getPortInfo(CommPortIdentifier portid) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(portid.getName()); 
     sb.append(", "); 
     sb.append("portType: "); 
     if (portid.getPortType() == CommPortIdentifier.PORT_SERIAL) 
      sb.append("serial"); 
     else if (portid.getPortType() == CommPortIdentifier.PORT_PARALLEL) 
      sb.append("parallel"); 
     else 
      sb.append("unknown"); 
     return sb.toString(); 
    } 

} 
+0

большое спасибо. я получил его – user2861617

+0

Пожалуйста, примите ответ, в соответствии с протоколом SO, если он имел хорошее применение для вашего решения. Если вы нашли решение самостоятельно, пусть все это знают. Отправьте свой собственный ответ, опишите решение и примите его. – Whome

Смежные вопросы