第一个项目,它只是出于兴趣所以我可以学习。
我正在尝试创建一个可以在通讯端口发送字符串的应用程序。下面是我的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();
}
}
}
答案 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?
和另外两个答案基本上等于读取串口的答案。
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。