我正在尝试使用接口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 - 实现线程的接口相关推荐

  1. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

  2. java定时线程池_java 定时器线程池(ScheduledThreadPoolExecutor)的实现

    前言 定时器线程池提供了定时执行任务的能力,即可以延迟执行,可以周期性执行.但定时器线程池也还是线程池,最底层实现还是ThreadPoolExecutor,可以参考我的另外一篇文章多线程–精通Thre ...

  3. java 线程管理_Java平台线程管理

    简介 在计算机领域中,我们说的并发(concurrency)是指一些列任务的同时运行.如果一台电脑有多个处理器或者有一个多核处理器,这个同时性是真正意义上的并发:但是一台电脑只有一个单核处理器,这个同 ...

  4. java 线程百科_Java并发——线程介绍

    前言: 互联网时代已经发展到了现在.从以前只考虑小流量到现在不得不去考虑高并发的问题.扯到了高并发的问题就要扯到线程的问题.你是否问过自己,你真正了解线程吗?还是你只知道一些其他博客里写的使用方法.下 ...

  5. java线程安全性_Java并发-线程安全性

    1.什么是线程安全性? 在线程安全性的定义中,最核心的就是正确性.当多线程访问调用某个类时,线程之间不会出现错误的交互,不管运行时线程如何交替执行,并且在主调代码不需要任何同步或协同,这个类都能表现出 ...

  6. java 多线程池_Java ThreadPoolExecutor线程池 同时执行50个线程

    最近项目上有个需求,需要从FTP服务器中下载大批量的数据文件,然后解析该数据文件进行入库,数据库为oracle,最后在通过web工程,以报表和图表的形式进行展现. 这些批量的数据文件为纯文本文件,每天 ...

  7. java 添加等待时间_Java中线程等待特定时间的最有效方法 - java

    我知道这个问题here,但是我有一个稍微不同的问题.如果我希望自己通过各种Thread方法(而不是通过实用程序类或Quartz)手动编码某个线程在特定时间的运行,那么最有效(就开销而言)进行编码. 我 ...

  8. java 抽象接口_JAVA中的“抽象接口”

    在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现. 今 ...

  9. java 后台线程作用_Java 后台线程介绍

    packagecom.aaa.threaddemo;/** 一 Java后台线程? * 守护线程--也称"服务线程",他是后台线程, * 它有一个特性,即为用户线程 提供 公共服务 ...

  10. java多线程通信_Java多线程-线程通信

    原标题:Java多线程-线程通信 通信的方式 要想实现多个线程之间的协同,如:线程执行先后顺序.获取某个线程执行的结果等等.涉及到线程之间的相互通信,分为下面四类: 文件共享 网络共享 共享变量 JD ...

最新文章

  1. 一档博士40万年薪+70万房补!引进224人!​这所大学2021年公开招聘专任教师公告...
  2. python字符类型的一些方法
  3. 嵌入式笔录(6)单管收音机电路分析
  4. vue-router query,parmas,meta传参
  5. POJ1207-The 3n + 1 problem
  6. linux内核驱动之 用户空间和内核空间
  7. CYYMysql 源码解读 2
  8. 根据文件路径打开文件所在文件夹,并且默认选中该文件
  9. memcached全面剖析–5. memcached的应用和兼容程序
  10. redis下载与安装(windows版)
  11. python爬虫框架教程_python爬虫框架有哪些
  12. 计算机游戏泡泡龙,泡泡龙电脑版
  13. 解决tooltips鬼畜问题
  14. 通过Chrome实时调试webview
  15. 油罐清洗抽吸系统设计
  16. 开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山
  17. Programming Ruby 读书笔记(五)
  18. 消费新品周报 | AWE海尔推出无尘洗衣机;卡西欧F1红牛车队合作新款运动手表...
  19. 基于Autocad 2016,与 CASS10 无缝整合的地下管线成图系统
  20. Dataset:heart disease心脏病数据集的简介、下载、使用方法之详细攻略

热门文章

  1. JSON学习笔记(五)- JSON.stringify()
  2. Cert manager自动签发/更新证书
  3. 图网络中的社群及社群发现算法
  4. jvm默认垃圾收集器
  5. T4模板:MVC中用T4模板快速生成代码
  6. (转)基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案
  7. 前华远房地产任大炮任志强:我一定不要清华的毕业生
  8. J2SE理解之一:声明和访问控制
  9. (转)40种网站设置技巧
  10. A Convolutional Neural Network for Modelling Sentences阅读笔记