我是靠谱客的博主 温柔摩托,最近开发中收集的这篇文章主要介绍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

各位大佬这怎么解决啊?!

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

:

  • 接着写入代码测试 :

 发送短信 :

// SendMessage.java - Sample application.
//
// This application shows you the basic procedure for sending messages.
// You will find how to send synchronous and asynchronous messages.
//
// For asynchronous dispatch, the example application sets a callback
// notification, to see what's happened with messages.

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();
      }
   }
}

接收短信 :

// ReadMessages.java - Sample application.
//
// This application shows you the basic procedure needed for reading
// SMS messages from your GSM modem, in synchronous mode.
//
// Operation description:
// The application setup the necessary objects and connects to the phone.
// As a first step, it reads all messages found in the phone.
// Then, it goes to sleep, allowing the asynchronous callback handlers to
// be called. Furthermore, for callback demonstration purposes, it responds
// to each received message with a "Got It!" reply.
//
// Tasks:
// 1) Setup Service object.
// 2) Setup one or more Gateway objects.
// 3) Attach Gateway objects to Service object.
// 4) Setup callback notifications.
// 5) Run

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.....

最后

以上就是温柔摩托为你收集整理的64位系统用java实现串口通信win32com.dll出现问题的全部内容,希望文章能够帮你解决64位系统用java实现串口通信win32com.dll出现问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部