Эта статья разделяет конкретный код для Java для реализации последовательной связи для вашей ссылки. Конкретный контент заключается в следующем
1. Введение
Программа последовательной связи, реализованная Java, поддерживает отправку и получение шестнадцатеричных данных.
Исходный код: SerialPortDemo
Рендеринги следующие:
2.rxtxcomm
Java Serial Communication Degy Dare Package rxtxcomm.jar
Адрес загрузки: http://download.csdn.net/detail/kong_gu_you_lan/9611334
Включает 32-битное и 64-битное использование версий:
Копировать rxtxcomm.jar в каталог java_home/jre/lib/ext;
Копировать rxtxserial.dll в каталог java_home/jre/bin;
Копировать rxtxparallel.dll в каталог java_home/jre/bin;
Java_home - это путь установки JDK
3. Управление коммуникацией последовательного порта
SerialPortManager реализует управление последовательным портом, включая поиск доступных портов, открытие и закрытие последовательного порта, а также отправку и получение данных.
пакет com.yang.serialport.manage; импорт gnu.io.commport; import gnu.io.commportientifier; импорт gnu.io.nosuchportexception; импорт gnu.io.portinuseexception; импорт gnu.io.serialport; импорт gnu.io.serialporteventlister; java.io.inputstream; import java.io.outputstream; import java.util.arraylist; import java.util.enumeration; import java.util.toomanylistenersexception; импорт com.yang.serialport.exception.nosuchport; импорт com.yang.serialport.exception.notaserapport; com.yang.serialport.exception.portinuse; import com.yang.serialport.exception.readdatafromserialportfailure; import com.yang.serialport.exception.senddatatoserialportfailure; импорт com.yang.serialport.exception.serialportpreamcleure; импорт. com.yang.serialport.exception.serialPortOutputStreamCloseFailure; импорт com.yang.serialport.exception.serialportparameterfailure; импорт com.yang.serialport.exception.toomomanylisteners;/************************************************ имена*/ @suppresswarnings ("unchecked") public static final arraylist <string> findport () {// Получить все доступные в настоящее время серийные порты enumeration <comportIdentifier> portlist = comportIdentifier .getPortIdentifiers (); Arraylist <string> portnamelist = new ArrayList <string> (); // Добавить доступное имя последовательного порта в список и вернуть список while (portlist.hasmoreelements ()) {string portname = portlist.nextelement (). GetName (); portnamelist.add (portname); } вернуть портаntist; } /*** Открыть последовательный порт** @param portname* name* @param baudrate* choce* @return Serial Port объект* @Throws SerialPortParameterFailure* Не удалось установить параметры последовательного порта* @Throw Занят*/ public Static Final Serialport Openport (String portname, int baudrate), бросает serialportparameterfailure, notaserialport, nosuchport, portinuse {try {// идентифицировать порт по названию порта comportedifier portidentifier = commportiditiveifier .getportidentifier (portname); // Откройте порт, установите название порта и тайм -аут (время ожидания операции открытия) Comport Comport = Portidentifier.open (PortName, 2000); // Определите, является ли это последовательным портом, если (Commport Exaction Of serialport) {serialport serialport = (serialport) Comport; try {// Установить скорость передачи и другие параметры серийного порта serialport.seterialportparams (baudrate, serialport.databits_8, serialport.stopbits_1, serialport.parity_none); } catch (unsupportedComperationException e) {бросить новый serialportparameterfailure (); } return serialport; } else {// не серийный порт бросает новый notaserialport (); }} catch (nosuchportException e1) {бросить новый nosuchport (); } catch (portinuseexception e2) {throw new portinuse (); }} / *** Закройте последовательный порт** @param serialport* объект последовательного порта, который должен быть закрыт* / public void closeport (serialport serialport) {if (serialport! = Null) {serialport.close (); serialport = null; }} / *** Отправить данные в последовательный порт** @param serialport* Объект последовательного порта* @param order* Данные для отправки* @throws sendatatoserialportfailure* Не удалось отправить данные в серийный порт* @throws serialportoutputptreamclefailure* Закрыть погребальный поток по сравнению с Serial Port Porteport (Serial Portport Porteport (Serial Porteport, по сравнению с Serial Portport, по порту Serial PortePort, по сравнению с Serial PortePort, по сравнению с Serial PORTEPORTEPORTOPORTOPOPORTEPORTEREPORTEREPORTEREPORTEREPOR Throws SendatatoSerialPortFailure, serialPortOutputStreamCloseFailure {outputStream Out = null; try {out = serialport.getOutputStream (); out.write (order); out.flush (); } catch (ioException e) {бросить новый SendatatoSerialPortFailure (); } наконец {try {if (out! = null) {out.close (); out = null; }} catch (ioException e) {бросить новый serialportOutputStreamCloseFailure (); }}} / *** Читать данные из последовательного порта** @param serialport* Объект serialport с установленным в настоящее время соединение* @return Данные чтение* @Throws ReadDataFromSerialPortFailure* Произошла ошибка при чтении данных из серийного порта* @Throws SerialPortInptreamClosefailure* Призначал погрешность в соответствии с погрешным портом. readfromport (serialport serialport) бросает readdataFromSerialPortFailure, serialPortInputStreamCloseFailure {inputStream in = null; байт [] байты = null; try {in = serialport.getInputStream (); // Получить длину данных int в буфере Bufflenth = in.vailable (); while (bufflenth! = 0) {// инициализировать массив байтов в длину данных в буферных байтах = новый байт [bufflenth]; in.read (байты); bufflenth = in.vailable (); }} catch (ioException e) {throw new ReadDataFromSerialPortFailure (); } наконец {try {if (in! = null) {in.close (); in = null; }} catch (ioException e) {бросить новый serialPortInputStreamCloseFailure (); }} вернуть байты; } / ** * Добавить слушатель * * @param port * объект последовательного порта * @param слушатель * последовательный слушатель * @throws toomonylisteners * toomonylisteners * toomonylistener Слишком много объектов класса прослушивания * / public void addlistener (serialport port, serialporteventlieser levider stirlister) trohser {trese {// adderer porter levider levider -lestreter // Установите поток приема прослушивания Wake-Up, когда данные прибывают в port.notifyondataavailable (true); // Установить поток прерывания Wake-Up, когда связь прерван PORT.NOTIFYONBREAKINTERNTRUPT (true); } catch (toomanylistenersException e) {бросить новые томанолистенеры (); }}}4. Программа главного окна
/ * * MANERFRAME.Java * * Создан на 2016.8.19 */package com.yang.serialport.ui; импорт gnu.io.serialport; импорт gnu.io.serialportevent; импорт gnu.io.serialporteventlister; импорт java.awt.color; import.ava.Awt.GraphicsEriner java.awt.event.actionevent; import java.awt.event.actionlistener; импорт java.util.list; импорт javax.swing.borderfactory; импорт javax.swing.jbutton; импорт javax.swing.jcombobox; импорт javax.swing.jframe; Javax javax.swing.jscrollpane; import javax.swing.jtextarea; import javax.swing.jtextfield; import com.yang.serialport.exception.nosuchport; импорт com.yang.serialport.exception.notaserialport; импорт com.yang.serialport.excret. com.yang.serialport.exception.sendDatatoSerialPortFailure; Import Com.yang.SerialPort.Exception.SerialPortOutpreamCloseFailure; импорт com.yang.serialport.exception.serialportparameterfailure; импорт com.yang.serialport.exception.tomanylisteners; com.yang.serialport.manage.serialportmanager; import com.yang.serialport.utils.byteutils; import com.yang.serialport.utils.showutils;/*** Основной интерфейс** @author yangle*/public класс Mainframe extends jframe {/** Программный интерфейс. / *** Высота интерфейса программы*/ public static final int height = 360; private jtextarea dataView = new jtextArea (); private jscrollpane scrolldataview = new jscrollpane (dataView); // Панель настройки последовательного порта Private JPanel SerialPortPanel = new jPanel (); Частный jlabel serialportlabel = new jlabel ("серийный порт"); Частный jlabel baudrateLabel = new jlabel ("baudrate"); Частный jcombobox commchoice = new jcombobox (); Частный jcombobox baudtechoice = new jcombobox (); // Операционная панель Private JPanel OperatePanel = new jPanel (); Private JTextField DataInput = new JTextField (); Частный JButton SerialPortoPerate = New Jbutton («Открытый серийный порт»); Частный JButton SendData = new Jbutton («Отправить данные»); Частный список <string> commlist = null; Частный сериал Serialport; public manicframe () {initview (); initComponents (); ActionListener (); initData (); } private void initView () {// Закрыть программу setDefaultCloseoPeration (javax.swing.windowconstants.exit_on_close); // Запрещение максимизации окна SetReSizable (false); // Установить окно программы в центральную точку p = graphicsEnvironment.getlocalgraphicsEnvironment () .getCenterpoint (); setbounds (px - ширина / 2, py - высота / 2, ширина, высота); this.setlayout (null); Settitle («Серийное общение»); } private void initComponents () {// отображение данных dataView.setFocusable (false); scrolldataview.setbounds (10, 10, 475, 200); добавить (scrolldataview); // serialportpanel.setborder (borderfactory.createtitledborder ("serialportset")); serialportpanel.setbounds (10, 220, 170, 100); serialportpanel.setlayout (null); добавить (serialportpanel); serialportlabel.setforeground (color.gray); SerialPortLabel.SetBounds (10, 25, 40, 20); serialportpanel.add (serialportlabel); commchoice.setfocusable (false); Commchoice.SetBounds (60, 25, 100, 20); serialportpanel.add (Commchoice); baudrateLabel.setforeground (color.gray); BaudrateLabel.SetBounds (10, 60, 40, 20); serialportpanel.add (BaudrateLabel); baudtechoice.setfocusable (false); baudtechoice.setbounds (60, 60, 100, 20); serialportpanel.add (baudtechoice); // Operation OperatePanel.SetBounds (200, 220, 285, 100); OperatePanel.SetLayout (null); добавить (OperatePanel); DataInput.SetBounds (25, 25, 235, 20); operatepanel.add (datainput); SerialPortoPerate.setFocusable (false); SerialPortoPerate.SetBounds (45, 60, 90, 20); OperatePanel.add (SerialPortoperate); SendData.SetFocusable (false); SendData.SetBounds (155, 60, 90, 20); OperatePanel.add (SendData); } @Suppresswarnings ("unchecked") private void initdata () {commlist = serialportmanager.findport (); // Проверьте, есть ли последовательный порт, добавьте его в опцию if (commlist == null || commlist.size () <1) {showutils.warningmessage («Не было найдено действительный последовательный порт!»); } else {for (string s: commlist) {commchoice.additem (s); }} baudtechoice.additem ("9600"); baudtechoice.additem ("19200"); baudtechoice.additem ("38400"); baudtechoice.additem ("57600"); baudtechoice.additem ("115200"); } private void actionListener () {serialPortoPerate.addactionListener (new ActionListener () {@Override public void actionPerformed (actionEvent e) {if ("Открытый серийный порт" .equals (serialportoperate.getText ()) && serialport == null) {outserialport (e); senddata.addactionListener (new ActionListener () {@Override public void actionPerformed (actionEvent e) {sendData (e);}}); } / *** Откройте последовательный порт** @param evt* click event* / private void openserialport (java.awt.event.actionevent evt) {// Получить строку имени последовательного порта commname = (string) commchoice.getSelectedItem (); // Получить скорость передачи данных int baudrate = 9600; String bps = (String) baudtechoice.getSelectedItem (); baudrate = integer.parseint (bps); // Проверьте, является ли имя последовательного порта правильным if (commname == null || commname.equals ("")) {showutils.warningmessage («Не было обнаружено достоверного последовательного порта!»); } else {try {serialport = serialportmanager.openport (commname, baudrate); if (serialport! = null) {dataView.settext ("serialport включен" + "/r/n"); serialportoperate.settext ("Close Serialport"); }} catch (serialPortParameterFailure e) {e.printStackTrace (); } catch (nosuchport e) {e.printstacktrace (); } catch (portinuse e) {e.printstacktrace (); Showutils.warningMessage («Последовательный порт был занят!»); }} try {serialportmanager.addlistener (serialport, new seriallistener ()); } catch (toomanylisteners e) {e.printstacktrace (); }} / *** Закройте последовательный порт** @param evt* click event* / private void sloseerialport (java.awt.event.actionevent evt) {serialportmanager.closeport (serialport); dataView.settext ("последовательный порт закрыт" + "/r/n"); serialportoperate.settext («Открытый серийный порт»); } / *** Отправить данные** @param evt* click event* / private void senddata (java.awt.event.actionevent evt) {// Введите шестнадцатеричные символы непосредственно в поле ввода, длина должна быть даже строкой data = dataInput.getText (). ToString (); try {serialportmanager.sendtoport (serialport, byteutils.hexstr2byte (data)); } catch (sendatatoSerialPortFailure e) {e.printStackTrace (); } catch (serialPortOutputStreamCloseFailure e) {e.printStackTrace (); }} Частный класс SerialListener реализует serialPorteventListener { / *** Руководство контролируемых событий последовательных портов* / public void serialevent (serialportevent serialportevent) {switch (serialportevent.geteventtype ()) {case serialportevent.bi: // 10 Interrtilepe. перерыв; case serialportevent.oe: // 7 переполнение (переполнение) случая ошибки serialportevent.fe: // 9 случая ошибки кадра serialportevent.pe: // 8 случай ошибок паритета serialportevent.cd: // 6 Дело о обнаружении носи Индикация случая serialportevent.output_buffer_empty: // 2 выходной буфер был очищен разрыв; case serialportevent.data_available: // 1 Доступные данные существуют на серийном порту Byte [] data = null; try {if (serialport == null) {showutils.errormessage («Объект серийного порта пуст! Мониторинг не удался!»); } else {// прочитать данные последовательного порта = serialportmanager.readfromport (serialport); dataView.append (byteutils.bytearraytohexstring (data, true) + "/r/n"); }} catch (Exception e) {showutils.errormessage (e.toString ()); // Выйти из системы после отображения ошибки, когда ошибка чтения возникает System.exit (0); } перерыв; }}} public static void main (string args []) {java.awt.eventqueue.invokelater (new Runnable () {public void run () {new Manainframe (). setVisible (true);}}); }}5. Написано в конце
Адрес загрузки исходного кода: SerialPortDemo
Студенты могут жаловаться и комментировать. Если вы думаете, что этот блог полезен для вас, оставьте сообщение или дайте ему комментарий (^-^)
Спасибо: Написание инструментов последовательной коммуникации на основе Java
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.