用java + fxml 生成想要的十六进制S/N码并通过串口存入,在fxml显示
时间: 2024-03-03 22:49:29 浏览: 111
生成十六进制S/N码可以使用Java中的UUID(Universally Unique Identifier)类来实现。UUID是一个标准的32位长度的字符串,可以使用toString()方法将其转换为16进制表示。在Java中操作串口可以使用Java Comm API,可以在Java SE Development Kit中找到该API。
下面是一个生成S/N码并通过串口存入并在Fxml显示的例子:
```java
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.UUID;
public class Controller {
@FXML
private TextField snTextField;
@FXML
private Label statusLabel;
private SerialPort serialPort;
public void generateSN() {
UUID uuid = UUID.randomUUID();
String sn = uuid.toString().replace("-", "");
snTextField.setText(sn);
}
public void saveSN() {
String sn = snTextField.getText();
if (serialPort != null) {
try {
OutputStream outputStream = serialPort.getOutputStream();
outputStream.write(sn.getBytes());
statusLabel.setText("S/N码已存入串口");
} catch (IOException e) {
e.printStackTrace();
statusLabel.setText("串口写入失败");
}
} else {
statusLabel.setText("串口未连接");
}
}
public void connectSerialPort() {
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
CommPortIdentifier portIdentifier = (CommPortIdentifier) portList.nextElement();
if (portIdentifier.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (portIdentifier.getName().equals("COM1")) {
try {
serialPort = (SerialPort) portIdentifier.open("SerialPort", 2000);
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
statusLabel.setText("串口已连接");
} catch (Exception e) {
e.printStackTrace();
statusLabel.setText("串口连接失败");
}
}
}
}
}
public void disconnectSerialPort() {
if (serialPort != null) {
serialPort.close();
serialPort = null;
statusLabel.setText("串口已断开");
}
}
}
```
在FXML文件中,使用Button、TextField和Label分别绑定对应的方法即可实现功能。需要注意的是,在连接串口时需要将串口名称(COM1)修改为实际的串口名称。
阅读全文