2013-02-20 88 views
-1

这是该方法,我想从该方法获取变量数据以在另一个端口中使用它。从特定端口获取数据

public synchronized void serialEvent(SerialPortEvent oEvent) { 
    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { 
     try { 
      int available = input.available(); 
      byte chunk[] = new byte[available]; 
      input.read(chunk, 0, available); 

      // Displayed results are codepage dependent 

      data =new String(chunk); 

     } catch (Exception e) { 
      System.err.println(e.toString()); 
     } 
    } 
} 
+0

请正确地提出你的问题。你面临的问题是什么?这是一个数据被其他线程/方法读取的问题吗? – user1428716 2013-02-20 22:00:40

+0

此方法读取我想在另一个类中使用的adata进行身份验证等。 – 2013-02-21 00:46:03

回答

1

这取决于你想要达到的目的,最简单的方法是直接从serialEvent调用其他方法(比如它的名字processData),并通过它,你从COM端口接收例如数据processData(new String(chunk));

这种方法的问题是,如果您的方法processData做了一些重的事情,它会阻止serialEvent

另一种方法是有一个单独的thread来处理该数据,您可以与concurrent.BlockingQueue的实现进行通信。因此,在serialEvent内,您只需将数据推送至队列,并继续等待processData完成。

只需使用BlockingQueue搜索Producer/Consumer模式,就可以找到大量代码示例。