将字符串发送到COM端口

时间:2015-01-15 08:53:03

标签: java serial-port jbutton

第一个项目,它只是出于兴趣所以我可以学习。

我正在尝试创建一个可以在通讯端口发送字符串的应用程序。下面是我的GUI(第一次尝试!)

我创建了按钮并且他们做了一些事情,但现在我需要添加com端口功能。

有人可以指点我吗?请用最简单的语言。我是自学成才。

import java.awt.GridLayout;
import java.io.*;
import javax.swing.*;

import java.util.*;



public class AlarmGenerator extends javax.swing.JFrame {

public AlarmGenerator() {
    initComponents();
}


private void initComponents() {

    jTextField1 = new javax.swing.JTextField();
    jTextField2 = new javax.swing.JTextField();
    jButton1 = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();
    jButton3 = new javax.swing.JButton();
    jButton4 = new javax.swing.JButton();


    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jTextField1.setText("Enter Custom String Here");
    jTextField2.setText("Result");
    jButton1.setText("Alarm1");
    jButton2.setText("Alarm2");
    jButton3.setText("Alarm3");
    jButton4.setText("Custom Alarm");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()               

                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)    
                    .addComponent(jButton1)
                    .addComponent(jButton2)
                    .addComponent(jButton3)
                    .addComponent(jButton4)
                    .addComponent(jTextField1)
                    .addComponent(jTextField2)

    )));
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()

            .addComponent(jButton1)
            .addComponent(jButton2)
            .addComponent(jButton3)
            .addComponent(jButton4)
            .addComponent(jTextField1)
            .addComponent(jTextField2)

            .addContainerGap(0, Short.MAX_VALUE))
    );

    pack();

    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }

        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
            jTextField2.setText("Alarm 1 Activated, String: "+alarm1);
        }
    });

    jButton2.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton2ActionPerformed(evt);
        }

        private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
            jTextField2.setText("Alarm 2 Activated, String: "+alarm2);
        }
    });

    jButton3.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton3ActionPerformed(evt);
        }

        private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
            jTextField2.setText("Alarm 3 Activated, String: "+alarm3);
        }
    });

    jButton4.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton4ActionPerformed(evt);
        }

        private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
            jTextField2.setText("Custom alarm, string sent: "+jTextField1.getText ());
        }
    });
}                       

public static void main(String args[]) {        

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new AlarmGenerator().setVisible(true);


        }
    });


}

// Variables declaration                    
private static javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
String alarm1 = "Hello";
String alarm2 = "Bye";
String alarm3 = "Custom";
// End of variables declaration                   
}

第2类

import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;

import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TwoWaySerialComm {
public TwoWaySerialComm() {
    super();
}

void connect(String portName) throws Exception {
    CommPortIdentifier portIdentifier = CommPortIdentifier
            .getPortIdentifier(portName);
    if (portIdentifier.isCurrentlyOwned()) {
        System.out.println("Error: Port is currently in use");
    } else {
        CommPort commPort = portIdentifier.open(this.getClass().getName(),
                2000);

        if (commPort instanceof SerialPort) {
            SerialPort serialPort = (SerialPort) commPort;
            serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

            InputStream in = serialPort.getInputStream();
            OutputStream out = serialPort.getOutputStream();

            (new Thread(new SerialReader(in))).start();
            (new Thread(new SerialWriter(out))).start();

        } else {
            System.out
                    .println("Error: Only serial ports are handled by this example.");
        }
    }
}

/** */
public static class SerialReader implements Runnable {
    InputStream in;

    public SerialReader(InputStream in) {
        this.in = in;
    }

    public void run() {
        byte[] buffer = new byte[1024];
        int len = -1;
        try {
            while ((len = this.in.read(buffer)) > -1) {
                System.out.print(new String(buffer, 0, len));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

/** */
public static class SerialWriter implements Runnable {
    OutputStream out;

    public SerialWriter(OutputStream out) {
        this.out = out;
    }

    public void run() {
        try {
            int c = 0;
            while ((c = System.in.read()) > -1) {
                this.out.write(c);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public static void main(String[] args) {
    try {
        (new TwoWaySerialComm()).connect("COM3");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

2 个答案:

答案 0 :(得分:2)

看一下这个链接。

它将提供有关如何通过COM端口发送数据的更多信息

How to send data to COM PORT using JAVA?

此页面链接到一些可能的答案

Java Serial Communication on Windows

Is there Java library or framework for accessing Serial ports?

Reading serial port in Java

和另外两个答案基本上等于读取串口的答案。

private TwoWaySerialComm twoWaySerCom;

public AlarmGenerator() {

    initComponents();   

    twoWaySerCom = new TwoWaySerialComm();

    try {

        twoWaySerCom.connect("COM1");
    } 
    catch (Exception e) {

        e.printStackTrace();
    }
}

我注意到你有多个

 public static void Main(string[] args)

在您的项目中,这些是项目条目,一个就足够了。

答案 1 :(得分:0)

如果您正在使用Linux,我已经创建了一个Java包,j232和本机库libj232,它是开源的并托管在GitHub上。它应被视为“正在进行中的工作”,目前仅处理同步串行数据。

主Java包是here及其关联的本机库here。另请查看wiki for j232,最后查看example page