日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 线程接口_java - 实现线程的接口

發布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 线程接口_java - 实现线程的接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在嘗試使用接口SerialPortListener將兩個類“MyJFrame”和“MySerialPort”“連接”在一起,但我無法知道如何去做。我這樣做的原因是因為昨天我有一個問題,從串口緩沖區分配數據到MySerialPort類中的全局String(finalString)。這個字符串應該返回給標簽顯示的MyJFrame。問題在于我的標簽在任何事情之前都會顯示finalString

被分配給finalString,因為類在不同的線程中運行。我在論壇上發布了這個問題,并收到了一個建議,使用接口來連接它們的線程,并且我修改了代碼。我在哪里使用關鍵字實現SerialPortListener,我該如何獲得價值?

SerialPortListener接口代碼

public interface SerialPortListener {

void stringReveivedFromSerialPort(String s);

}MyJFrame類代碼

public class MyJFrame extends JFrame{

public MySerialPorts msp = new MySerialPorts();

public MyJFrame(){

initComponents();//draws GUI components

initSerialPorts();//initializes serial ports

}

private void initSerialPorts(){

msp.getPortName();//gets serial port's name (in this example COM1)

msp.openPort();//opens the communication for port COM1

}

private String firmwareVersion(){

//This is the method I call when I want to get the Firmware Version

msp.getFirmwareVersion();//sends command to receive reply from serial device

lblFirmwareVersion.setText();//label that prints the firmware version String

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

new MainJFrame().setVisible(true);

}

});

}

private JLabel lblFirmwareVersion;

}MySerialPort類代碼

public class MySerialPort {

//this method is using the jSSC API (java simple serial connector)

//http://code.google.com/p/java-simple-serial-connector/

private SerialPort serialPort;

private int iBaudRate = SerialPort.BAUDRATE_57600;

private int iDataBits = SerialPort.DATABITS_8;

private int iStopBits = SerialPort.STOPBITS_1;

private int iParity = SerialPort.PARITY_NONE;

private String portName = "";

// private String finalString = "";

// private StringBuilder sbBuffer = new StringBuilder();

private List portListeners = new ArrayList();

public void addMyPortListener(SerialPortListener listener) {

portListeners.add(listener);

}

public void removeMyPortListener(SerialPortListener listener) {

portListeners.remove(listener);

}

public void getFirmwareVersion() {

sendPortCommand("\r\n");

}

// public String returnFinalString() {

// return finalString;

// }

public void getPortName() {

String[] ports = SerialPortList.getPortNames();

portName = ports[0];

}

public void openPort() {

serialPort = new SerialPort(portName);

try {

if (serialPort.openPort()) {

if (serialPort.setParams(iBaudRate, iDataBits, iStopBits, iParity)) {

serialPort.addEventListener(new Reader(), SerialPort.MASK_RXCHAR

| SerialPort.MASK_RXFLAG

| SerialPort.MASK_CTS

| SerialPort.MASK_DSR

| SerialPort.MASK_RLSD);

} else {

//Error Message - Can't set selected port parameters!

serialPort.closePort();

}

} else {

//Error Message - Can't open port!

}

} catch (SerialPortException | HeadlessException ex) {

//Error Message - Can't open port! - Do nothing

}

}

private void sendPortCommand(String sSendPortCommand) {

if (sSendPortCommand.length() > 0) {

try {

serialPort.writeBytes(sSendPortCommand.getBytes());

} catch (Exception ex) {

//Error Message - Error occured while sending data!

}

}

}

private class Reader implements SerialPortEventListener {

private String sBuffer = "";

@Override

public void serialEvent(SerialPortEvent spe) {

if (spe.isRXCHAR() || spe.isRXFLAG()) {

if (spe.getEventValue() > 0) {

try {

//Read chars from buffer

byte[] bBuffer = serialPort.readBytes(spe.getEventValue());

sBuffer = new String(bBuffer);

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

for (SerialPortListenerInterface listener : portListeners) {

listener.stringReveivedFromSerialPort(sBuffer);

}

}

});

// The following is the code I had prior to suggestion of using invokeLater instead of invokeAndWait

//

// sbBuffer.setLength(0);

//

// SwingUtilities.invokeAndWait(

// new Runnable() {

//

// @Override

// public void run() {

// sbBuffer.append(sBuffer);

// }

// });

//

// finalString = new String(sbBuffer);

} catch (Exception ex) {

}

}

}

}

}

}

總結

以上是生活随笔為你收集整理的java 线程接口_java - 实现线程的接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。