Играюсь с ардуинкой. Поэтому хочу наладить общение своей ардуинки с компьютером через последовательный порт. Так как я работаю на джаве, то выбор пал на джаву, а не на C# или библиотеку для работы с портами Qt. Но беда: нормальных библиотек для работы с COM портом из джавы я не нашел. Посоветуйте, пожалуйста, библиотеку и гайд по работе с ней. Желательно самое современное и стабильное. Нашел библиотеку JSSC, но при открытии порта COM3 при помощи нее вываливается ошибка: Код, который я запускаю: Код (C++): public class Main { private static SerialPort port = new SerialPort("COM3"); public static void main(String[] args) { try { port.openPort(); port.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT); port.addEventListener(new PortReader()); } catch (SerialPortException e) { System.out.println(e); } } private static class PortReader implements SerialPortEventListener { @Override public void serialEvent(SerialPortEvent evt) { if (evt.isRXCHAR() && evt.getEventValue() > 0) { try { String data = port.readString(evt.getEventValue()); port.writeString("Got data"); } catch (SerialPortException e) { System.out.println(e); } } } } } Причем если работать с портом на C#, то никаких ошибок не возникает, программа получает данные из порта и выводит их в консоль. Код (Text): using System; using System.IO.Ports; using System.Threading; namespace ConsoleApp1 { class Program { static SerialPort serialPort; static void Main(string[] args) { serialPort = new SerialPort(); serialPort.PortName = "COM4"; serialPort.BaudRate = 9600; serialPort.Open(); while (true) { string msg = serialPort.ReadExisting(); Console.WriteLine(msg); Thread.Sleep(200); } } } } Что не так на джаве?
https://forum.gipsyteam.ru/index.php?viewtopic=115299&st=2160#entry6973643 "И ни церковь, ни кабак – Ничего не свято! Нет, ребята, все не так, Все не так, ребята!"
У них там это жаркая тема на самом гитхабе: https://github.com/java-native/jssc/issues/65 Кому то помогает замена JRE, кому то переход на JSSC 2.9, но причины не ясны до сих пор вроде.
А вот эта либа не нужна jSSC-2.8_x86_64.dll? Посмотрел, на гитхабе у них есть сорцы этой либы, которую надо скомпилировать самому. Но я просто взял последнюю версию jar с гитхаба и у меня все завелось без dll
.jar это просто zip-архив. Если распаковать, то видно что jscc.dll лежит в подпапке natives/<имя_системы>/ Собственно сама либка это классическая перемычка JNI (Java Native Interface) между явой и нативным кодом dll/so конкретной системы который и делает всю работу.