就是一个菜瓜 2021-09-15 11:28 采纳率: 0%
浏览 46

64位系统用java实现串口通信win32com.dll出现问题

报错信息 :

Error loading win32com: java.lang.UnsatisfiedLinkError: no win32com in java.library.path

org.smslib.GatewayException: Comm library exception: java.lang.RuntimeException: javax.comm.NoSuchPortException

各位这怎么解决啊?!

我自己先是按照所给的文件进行了如下配置

img


接着写入代码测试 :
发送短信 :

package com.netty.spring.test;
 
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());
      /*
      modem.com1:网关ID(即短信猫端口编号)
      COM4:串口名称(在window中以COMXX表示端口名称,在linux,unix平台下以ttyS0-N或ttyUSB0-N表示端口名称),通过端口检测程序得到可用的端口
      115200:串口每秒发送数据的bit位数,必须设置正确才可以正常发送短信,可通过程序进行检测。常用的有115200、9600
      Huawei:短信猫生产厂商,不同的短信猫生产厂商smslib所封装的AT指令接口会不一致,必须设置正确.常见的有Huawei、wavecom等厂商
      最后一个参数表示设备的型号,可选
      */
      SerialModemGateway gateway = new SerialModemGateway("modem.com8", "COM8", 115200, "wavecom", "SLK-M200-LTE");
      gateway.setInbound(true);  //设置true,表示该网关可以接收短信,根据需求修改
      gateway.setOutbound(true);//设置true,表示该网关可以发送短信,根据需求修改
      gateway.setSimPin("0000");//sim卡锁,一般默认为0000或1234
      // Explicit SMSC address set is required for some modems.
      // Below is for VODAFONE GREECE - be sure to set your own!
      gateway.setSmscNumber("+8613010112500");//短信服务中心号码
      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("173xxxxxxxx", "你好!我是SLK-M200-LTE测试!");  //参数1:手机号码 参数2:短信内容
      msg.setEncoding(MessageEncodings.ENCUCS2);//这句话是发中文短信必须的
      Service.getInstance().sendMessage(msg);    //执行发送短信
      System.out.println(msg);
      // Or, send out a WAP SI message.
      //OutboundWapSIMessage wapMsg = new OutboundWapSIMessage("306974000000",
//new URL("http://www.smslib.org/"), "Visit SMSLib now!");
      //Service.getInstance().sendMessage(wapMsg);
      //System.out.println(wapMsg);
      // You can also queue some asynchronous messages to see how the callbacks
      // are called...
      //msg = new OutboundMessage("309999999999", "Wrong number!");
      //srv.queueMessage(msg, gateway.getGatewayId());
      //msg = new OutboundMessage("308888888888", "Wrong number!");
      //srv.queueMessage(msg, gateway.getGatewayId());
      System.out.println("Now Sleeping - Hit <enter> to terminate.");
      System.in.read();
      Service.getInstance().stopService();
   }
 
   /*
    短信发送成功后,调用该接口。并将发送短信的网关和短信内容对象传给process接口
   */
   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();
      }
   }
}

接收短信 :

package com.netty.spring.test;
 
import java.util.ArrayList;
import java.util.List;
import javax.crypto.spec.SecretKeySpec;
import org.smslib.AGateway;
import org.smslib.ICallNotification;
import org.smslib.IGatewayStatusNotification;
import org.smslib.IInboundMessageNotification;
import org.smslib.IOrphanedMessageNotification;
import org.smslib.InboundMessage;
import org.smslib.Library;
import org.smslib.Service;
import org.smslib.AGateway.GatewayStatuses;
import org.smslib.AGateway.Protocols;
import org.smslib.InboundMessage.MessageClasses;
import org.smslib.Message.MessageTypes;
import org.smslib.crypto.AESKey;
import org.smslib.modem.SerialModemGateway;
 
public class ReadMessages {
   public static Service srv = Service.getInstance();
 
   public void doIt() throws Exception {
      List<InboundMessage> msgList;
      InboundNotification inboundNotification = new InboundNotification();
      CallNotification callNotification = new CallNotification();
      GatewayStatusNotification statusNotification = new GatewayStatusNotification();
      OrphanedMessageNotification orphanedMessageNotification = new OrphanedMessageNotification();
      try {
         System.out.println("Example: Read messages from a serial gsm modem.");
         System.out.println(Library.getLibraryDescription());
         System.out.println("Version: " + Library.getLibraryVersion());
         SerialModemGateway gateway = new SerialModemGateway("modem.com8", "COM8", 115200, "wavecom", "SLK-M200-LTE");
         gateway.setProtocol(Protocols.PDU);
         gateway.setInbound(true);
         gateway.setOutbound(true);
         srv.setInboundMessageNotification(inboundNotification);
         srv.setCallNotification(callNotification);
         srv.setGatewayStatusNotification(statusNotification);
         srv.setOrphanedMessageNotification(orphanedMessageNotification);
         srv.addGateway(gateway);
         srv.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() + "%");
         System.out.println(" Battery Level: " + gateway.getBatteryLevel() + "%");
         System.out.println();
         srv.getKeyManager().registerKey("+8613800100500", new AESKey(new SecretKeySpec("0011223344556677".getBytes(), "AES")));
         msgList = new ArrayList<InboundMessage>();
         srv.readMessages(msgList, MessageClasses.ALL);
         for (InboundMessage msg : msgList) {
            System.out.println(msg);
//              srv.deleteMessage(msg);     //删除短信
         }
         System.out.println("Now Sleeping - Hit <enter> to stop service.");
         System.in.read();
         System.in.read();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
 
   public class InboundNotification implements IInboundMessageNotification {
      public void process(AGateway gateway, MessageTypes msgType, InboundMessage msg) {
         if (msgType == MessageTypes.INBOUND)
            System.out.println(">>> New Inbound message detected from Gateway: " + gateway.getGatewayId());
         else if (msgType == MessageTypes.STATUSREPORT)
            System.out.println(">>> New Inbound Status Report message detected from Gateway: " + gateway.getGatewayId());
         System.out.println(msg);
      }
   }
 
   public class CallNotification implements ICallNotification {
      public void process(AGateway gateway, String callerId) {
         System.out.println(">>> New call detected from Gateway: " + gateway.getGatewayId() + " : " + callerId);
      }
   }
 
   public class GatewayStatusNotification implements IGatewayStatusNotification {
      public void process(AGateway gateway, GatewayStatuses oldStatus, GatewayStatuses newStatus) {
         System.out.println(">>> Gateway Status change for " + gateway.getGatewayId() + ", OLD: " + oldStatus + " -> NEW: " + newStatus);
      }
   }
 
   public class OrphanedMessageNotification implements IOrphanedMessageNotification {
      public boolean process(AGateway gateway, InboundMessage msg) {
         System.out.println(">>> Orphaned message part detected from " + gateway.getGatewayId());
         System.out.println(msg);
         return false;
      }
   }
 
   public static void main(String args[]) {
      ReadMessages app = new ReadMessages();
      try {
         app.doIt();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

但是运行报上面的错误,怎么解决啊?

电脑是64位的,jdk也是64位的,更换了jdk32位的环境配置完,cmd ->java -version 显示的还是64位的jdk

  • 写回答

1条回答 默认 最新

  • CSDN专家-Time 2021-09-15 11:43
    关注

    那就是jdk没配好。配jdk需要重启。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月15日

悬赏问题

  • ¥20 python爬虫遇到空文本取不出来
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入