Краш при работе с COM портом на Java, библиотека jssc

Тема в разделе "WASM.BEGINNERS", создана пользователем Aoizora, 31 янв 2023.

Метки:
  1. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    351
    Играюсь с ардуинкой. Поэтому хочу наладить общение своей ардуинки с компьютером через последовательный порт. Так как я работаю на джаве, то выбор пал на джаву, а не на C# или библиотеку для работы с портами Qt. Но беда: нормальных библиотек для работы с COM портом из джавы я не нашел. Посоветуйте, пожалуйста, библиотеку и гайд по работе с ней. Желательно самое современное и стабильное.
    Нашел библиотеку JSSC, но при открытии порта COM3 при помощи нее вываливается ошибка:

    Код, который я запускаю:

    Код (C++):
    1. public class Main
    2. {
    3.     private static SerialPort port = new SerialPort("COM3");
    4.  
    5.     public static void main(String[] args)
    6.     {
    7.         try
    8.         {
    9.             port.openPort();
    10.             port.setParams(SerialPort.BAUDRATE_9600,
    11.                     SerialPort.DATABITS_8,
    12.                     SerialPort.STOPBITS_1,
    13.                     SerialPort.PARITY_NONE);
    14.             port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT);
    15.             port.addEventListener(new PortReader());
    16.         }
    17.         catch (SerialPortException e)
    18.         {
    19.             System.out.println(e);
    20.         }
    21.     }
    22.  
    23.     private static class PortReader implements SerialPortEventListener
    24.     {
    25.         @Override
    26.         public void serialEvent(SerialPortEvent evt)
    27.         {
    28.             if (evt.isRXCHAR() && evt.getEventValue() > 0)
    29.             {
    30.                 try
    31.                 {
    32.                     String data = port.readString(evt.getEventValue());
    33.                     port.writeString("Got data");
    34.                 }
    35.                 catch (SerialPortException e)
    36.                 {
    37.                     System.out.println(e);
    38.                 }
    39.             }
    40.         }
    41.     }
    42. }
    Причем если работать с портом на C#, то никаких ошибок не возникает, программа получает данные из порта и выводит их в консоль.


    Код (Text):
    1. using System;
    2. using System.IO.Ports;
    3. using System.Threading;
    4.  
    5. namespace ConsoleApp1
    6. {
    7.     class Program
    8.     {
    9.         static SerialPort serialPort;
    10.  
    11.         static void Main(string[] args)
    12.         {
    13.             serialPort = new SerialPort();
    14.             serialPort.PortName = "COM4";
    15.             serialPort.BaudRate = 9600;
    16.             serialPort.Open();
    17.             while (true)
    18.             {
    19.                 string msg = serialPort.ReadExisting();
    20.                 Console.WriteLine(msg);
    21.                 Thread.Sleep(200);
    22.             }
    23.         }
    24.     }
    25. }
    Что не так на джаве?
     
    Mikl___ нравится это.
  2. R81...

    R81... Active Member

    Публикаций:
    0
    Регистрация:
    1 фев 2020
    Сообщения:
    141
  3. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    439
    У них там это жаркая тема на самом гитхабе: https://github.com/java-native/jssc/issues/65
    Кому то помогает замена JRE, кому то переход на JSSC 2.9, но причины не ясны до сих пор вроде.
     
    Aoizora нравится это.
  4. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    351
    А вот эта либа не нужна jSSC-2.8_x86_64.dll? Посмотрел, на гитхабе у них есть сорцы этой либы, которую надо скомпилировать самому. Но я просто взял последнюю версию jar с гитхаба и у меня все завелось без dll
     
  5. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    439
    .jar это просто zip-архив. Если распаковать, то видно что jscc.dll лежит в подпапке natives/<имя_системы>/
    Собственно сама либка это классическая перемычка JNI (Java Native Interface) между явой и нативным кодом dll/so конкретной системы который и делает всю работу.
     
    Aoizora нравится это.