第一个项目,它只是出于兴趣,所以我可以学习。
我正在尝试做一个应用程序,将发送一个字符串向下通信端口。下面是我的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条答案
按热度按时间q9yhzks01#
看看这个链接。
它将提供更多关于如何通过com端口发送数据的信息
如何使用java将数据发送到com端口?
此页链接到一些可能的答案
windows下的java串行通信
是否有用于访问串行端口的java库或框架?
用java读取串口
另外两个答案与读取串口答案基本相等。
我注意到你有多个
在您的项目中,这些是项目条目,一个就足够了。
oxcyiej72#
如果您使用的是linux,我已经创建了一个java包j232和本机库libj232,它是开源的,托管在github上。它应该被视为“正在进行的工作”,目前只处理同步串行数据。
主java包在这里,其关联的本机库在这里。还可以看看j232的wiki,最后是示例页面。